簡體   English   中英

Django:過濾多對多字段

[英]Django: Filter many to many field

我希望收到一個var contact_exists ,可以用來更新某些字段。 但是,以下查詢始終使我返回django.core.exceptions.FieldError: Related Field got invalid lookup: event

您是否知道為什么event_related_fields__event無法按我預期的方式工作?

for selected_order in Order.objects.all():
    contact_exists = Contact.objects.filter(
        event_related_fields__event=selected_order.event,
    )

這是我的models.py

class Contact(TimeStampedModel):
    consent = models.BooleanField(verbose_name=_("Consent"))
    email = models.EmailField(verbose_name=_("Your email"))
    first_name = models.CharField(
        max_length=100,  # TODO Length must be same as for billing model
        verbose_name=_("First name"),
        null=True,
        blank=True,
    )
    last_name = models.CharField(
        max_length=100,  # TODO Length must be same as for billing model
        verbose_name=_("Last name"),
        null=True,
        blank=True,
    )
    events = models.ManyToManyField(Event, related_name='contacts')
    event_related_fields = models.ManyToManyField(
        Event, related_name='event_related_fields', through='EventRelatedFields'
    )
    organizer = models.ForeignKey(
        Organizer, on_delete=models.PROTECT, related_name='contacts'
    )  # PROTECT = don't allow to delete the organizer if contact exists

    class Meta:
        verbose_name = _("Contact")
        verbose_name_plural = _("Contacts")
        ordering = ('created',)
        unique_together = ('email', 'organizer')

    def __repr__(self):
        return "{}: {}".format(self.__class__.__name__, self)

    def __str__(self):
        return self.email


class EventRelatedFields(TimeStampedModel):
    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
    lead = models.BooleanField(
        verbose_name='Lead', default=False
    )  # Contact who 'Signed Up'
    attendee = models.BooleanField(
        verbose_name='Attendee', default=False
    )  # Contact assigned to ticket
    purchaser = models.BooleanField(
        verbose_name='Purchaser', default=False
    )  # Contact made the order

    class Meta:
        unique_together = [['event', 'contact']]

您不需要__event查找,請嘗試使用:

for selected_order in Order.objects.all():
    contact_exists = Contact.objects.filter(
        event_related_fields=selected_order.event,
    )

查找部分應包含Event模型的字段名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM