Попытка встроить форму в форму с внешними ключами

Я пытаюсь создать форму, в которой вошедший в систему пользователь (PrincipalGuest) может обновлять себя, а также несколько гостей (AccompanyingGuest). Мне нужна вся форма с полями attending и dietary_restrictions, встроенными в форму, а не только ModelMultipleChoiceField.

models.py

class Guest(models.Model):
    """ """

    attending = models.ManyToManyField("itinerary.Event", blank=True)
    dietary_restrictions = models.ManyToManyField(DietaryRestrictions, blank=True)
    last_modified = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True


class PrincipalGuest(Guest, AbstractUser):
    """ """

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = []

    username = None
    email = models.EmailField(_("email address"), unique=True)
    phone_number = PhoneNumberField(null=True)
    address = AddressField(on_delete=models.CASCADE, null=True)

    objects = PrincipalGuestManager()

    @property
    def name(self):
        return self.first_name + " " + self.last_name

    def __str__(self):
        return self.name


class AccompanyingGuest(Guest):
    """ """

    principal = models.ForeignKey(
        PrincipalGuest, related_name="accompanying_guests", on_delete=models.CASCADE
    )
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)
    is_under_ten = models.BooleanField(default=False)

    @property
    def name(self):
        return self.first_name + " " + self.last_name

    def __str__(self):
        return self.name

views.py

class RendezvousFormView(SuccessMessageMixin, UpdateView):
    template_name = "rsvp.html"
    form_class = RendezvousForm
    success_url = "/rsvp"
    success_message = "Thank you for your RSVP"

    def get_object(self):
        return self.request.user

forms.py

class RendezvousForm(ModelForm):
    """ """

    first_name = CharField(
        label="", widget=TextInput(attrs={"placeholder": "First Name"})
    )
    last_name = CharField(
        label="", widget=TextInput(attrs={"placeholder": "Last Name"})
    )
    email = CharField(label="", widget=TextInput(attrs={"placeholder": "Email"}))
    phone_number = CharField(
        label="", widget=TextInput(attrs={"placeholder": "Phone Number"})
    )
    address = AddressField(
        label="", widget=AddressWidget(attrs={"placeholder": "Home Address"})
    )
    attending = ModelMultipleChoiceField(
        queryset=Event.objects.all(),
        required=False,
        label="Will be attending",
        widget=CheckboxSelectMultiple(attrs={"class": "h4"}),
    )
    dietary_restrictions = ModelMultipleChoiceField(
        DietaryRestrictions.objects.all(),
        required=False,
        widget=CheckboxSelectMultiple(attrs={"class": "h4"}),
    )

    class Meta:
        model = PrincipalGuest
        fields = [
            "first_name",
            "last_name",
            "email",
            "phone_number",
            "address",
            "attending",
            "dietary_restrictions",
        ]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.label_suffix = ""
        self.fields["accompanying_guests"] = ModelMultipleChoiceField(
            queryset=AccompanyingGuest.objects.filter(principal=kwargs["instance"])
        )
Вернуться на верх