Django - Как использовать одно поле от одной модели к другой модели? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть 2 модели GeneralUser & UserVoteNews, в которых в качестве внешнего ключа используется Пользователь. Я хочу добавить логическое поле в GeneralUser и хочу получить к нему доступ в модели UserVoteNews. Как мне этого добиться?

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 = ??

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вместо поля используйте свойство свойство :

# 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()

Но было бы неплохо, если бы у вас было OneToOne отношение между GeneralUser и User моделью. Тогда вы можете просто использовать:

@property
def ban(self):
   return self.user.generaluser.ban
1 голос
/ 02 апреля 2020

Я бы сделал одну модель для бана. И так далее

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...