[英]Require ForeignKey object to be a related object of another model
我有一個模特
class EventArticle(models.Model):
event = models.ForeignKey(Event, related_name='article_event_commentary')
author = models.ForeignKey(Person)
和另一個模型
class Event(models.Model):
attendies = models.ManyToManyField(Person, related_name="people")
如何限制一個author
只說也是對象attendies
?
通常,在這種情況下, ForeignKey
limit_choices_to
參數是您的朋友。 (請參閱https://docs.djangoproject.com/zh-CN/1.8/ref/models/fields/#django.db.models.ForeignKey.limit_choices_to )
您可以將作者限制為已參加任何活動的用戶列表。 但是,即使這樣做也不是理想的選擇:
# don't try this at home, this will be excruciatingly slow...
def author_options():
all_attendee_ids = []
for e in Event.objects.all():
for a in e.attendies.all():
all_attendee_ids.append(a.id)
return {'author': Person.objects.filter(id_in=set(all_attendee_ids)).id}
# requires Django 1.7+
class EventArticle(models.Model):
event = models.ForeignKey(Event, related_name='article_event_commentary')
author = models.ForeignKey(Person, limit_choices_to=author_options)
但是,即使您沒有在問題中明確聲明它,我也懷疑您希望作者限於該特定事件(即EventArticle模型的event字段中指定的同一事件)的一組參與者。
在這種情況下,這帶來了兩個我認為無法徹底解決的問題:
由於在這里無法使用limit_choices_to,因此可能沒有辦法徹底解決此問題。 您可以在EventArticle模型中添加一個方法,該方法將為您提供潛在的作者列表,例如...
class EventArticle(models.Model):
event = models.ForeignKey(Event, related_name='article_event_commentary')
author = models.ForeignKey(Person)
def author_options(self):
if self.event:
return self.event.attendies.all()
else:
return []
...但是您仍然需要做一些工作以使這些選項可用於UI,以便用戶可以選擇它們。 在不了解您的設置的情況下,我會猜測是否嘗試回答該部分。
您可以重寫EventArticle模型的save()來確保它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.