如何在模型中引入一个字段,该字段只标记集合中的单个项目?理想的方法是有一个单选按钮,但是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基于我从这个问题得到的答案。
答案 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