Reputation: 1169
I have 2 models GeneralUser
& UserVoteNews
which uses User as foreign key. I want to add a Boolean field in the GeneralUser
, and want to access it in the UserVoteNews
model. How can I achieve this?
class GeneralUser(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
ban = models.BooleanField(default=True)
class UserVoteNews(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
ban = ??
Upvotes: 0
Views: 1180
Reputation: 146
I would make single model for ban field. And so on
class allUser(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
ban = models.BooleanField(default=True)
class GeneralUser(models.Model):
user = models.ForeignKey(allUser, on_delete=models.CASCADE)
class UserVoteNews(models.Model):
user =models.ForeignKey(allUser, on_delete=models.CASCADE)
Upvotes: 1
Reputation: 52028
Instead of a field, use a property method:
# for every ban value
class UserVoteNews(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
@property
def ban(self):
return self.user.generaluser.values('pk', 'ban')
# for latest ban value
class UserVoteNews(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
@property
def ban(self):
return self.user.generaluser.last().ban
# For any ban value
class UserVoteNews(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
@property
def ban(self):
return self.user.generaluser.filter(ban=True).exists()
But it would be good design if you had OneToOne
relation between GeneralUser
and User
model. Then you could simply use:
@property
def ban(self):
return self.user.generaluser.ban
Upvotes: 1