Django - 在模型中的一个集合中标记单个对象

时间:2011-11-19 10:36:33

标签: django django-models

如何在模型中引入一个字段,该字段只标记集合中的单个项目?理想的方法是有一个单选按钮,但是radio_fields必须指向ForeignKey或者选择,而我正在寻找的只是一个布尔字段。例如:

class A(models.Model):
    # fields

class B(models.Model):
    a       = models.ForeignKey(A)
    primary = models.BooleanField(default=False)

如果我可以将primary限制为True仅适用于与A相关的对象的一个​​项目,那么这将有效。

如果上述内容没有意义:我希望只有一个项目True来自共享相同B的{​​{1}}个项目。

更新 我已经扩展了这个问题并发了一个新帖子: Django - Map a OneToOneField to radio buttons on the admin interface基于我从这个问题得到的答案。

1 个答案:

答案 0 :(得分:3)

然后你应该在A:

中添加一个OneToOneField字段
class A(models.Model):
    true_b = models.OneToOneField('B', related_name='is_true')

    def save(self, *args, **kwargs):
        if self.true_b not in self.b_set.all():
            raise ValueError('True_b has to be among those B that refer to this A')
        super(A, self).save(*args, **kwargs)

class B(models.Model):
    a = models.ForeignKey(A)
    ...

同时添加save()方法以检查A.true_b项是否在A.b_set项中,如果不是,则引发异常。您可以向B添加快捷方式:

    @property
    def is_true(self):
        return a.true_b == self