首页 > 解决方案 > Django:通过比较第二个 OneToOne 相关模型的属性来获取第一个模型的对象

问题描述

我有两个模型,用户和卡。一位用户拥有一张卡。如果 Card 模型的“card_written”在视图中为 False,我需要获取 User 的对象。

class User(model.Model):
    phone           =   PhoneNumberField(null=False, blank=False, unique=True)
    email           =   models.EmailField(verbose_name="email", max_length=60, unique=True)

    first_name      =   models.CharField(max_length=30)
    last_name       =   models.CharField(max_length=30)

class Card(models.Model):
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)

    card_number = models.CharField(max_length=200)
    card_written = models.BooleanField(default=False, null=False)
    card_write_date = models.DateTimeField(null=True, blank=True)
    card_delivered = models.BooleanField(default=False, null=False)

标签: djangodjango-modelsdjango-views

解决方案


您可以通过双下划线分隔相关字段,在 Django 中非常轻松地查询相关模型。
像这样的查询应该适合您:

User.objects.filter(card__card_written=False)

这里 card 是相关名称,因为如果您希望它是其他需要在 Card 模型中指定的名称,则您尚未在 Card 模型中指定它:

user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE, related_name='something_else')

推荐阅读