Django-Extra-Views: Inlines дочерняя модель получает author none. Как мне установить его таким же, как у родителя?

Я уже день или два ломаю голову над этим вопросом. У меня есть веб-приложение django, в котором есть 3 модели

users/models.py:

from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User

# Create your models here.
class ExtendedUser(models.Model):
    user=models.OneToOneField(User,null=True, on_delete=models.CASCADE)

    def full_name(self):
        return (self.user.get_full_name())

    def __str__(self):
        return self.user.get_full_name()

    @receiver(post_save, sender=User)
    def create_or_update_user_extendeduser(sender, instance, created, **kwargs):
        if created:
            ExtendedUser.objects.create(user=instance)
        instance.extendeduser.save()

playground/models.py:

class Customer(models.Model):
    def __str__(self):
        return self.Customer_Name
    Customer_Name = models.CharField(max_length=100)
    SFDC_Customer_Record_Number = models.IntegerField(default='')
    Zone = models.CharField(max_length=50, default='')
    Government = models.BooleanField(default=False)
    date_posted = models.DateTimeField(default=timezone.now)
    customerauthor = models.ForeignKey(ExtendedUser, on_delete=models.DO_NOTHING,default=ExtendedUser)

    def get_absolute_url(self):
        return reverse('playground-home')

class Vue_Quote(models.Model):
    def __str__(self):
        return self.Quote_Name
    Quote_Name = models.CharField(max_length=100)
    SFDC_Golden_Opp_ID = models.IntegerField()
    Vue_System_Count = models.IntegerField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(ExtendedUser, on_delete=models.DO_NOTHING,default=ExtendedUser,blank=True,null=True)
    Quote_Type = models.CharField(max_length=100)
    Customer = models.ForeignKey(Customer, on_delete=models.DO_NOTHING, default='')
    
    def get_absolute_url(self):
        return reverse('quote-detail',kwargs={'pk': self.pk})

Я использую стороннее приложение django-extra-views для создания единой формы, которая позволяет пользователю одновременно создавать клиента и предложение. Views.py:

class QuoteInline(InlineFormSetFactory):
    model = Vue_Quote
    fields = ['Quote_Name','SFDC_Golden_Opp_ID','Vue_System_Count','Quote_Type',]
    factory_kwargs = {'extra':1}

class CreateQuoteInlinesView(CreateWithInlinesView):
    model = Customer
    inlines = [QuoteInline]
    fields = ['Customer_Name','SFDC_Customer_Record_Number','Zone','Government']
    template_name= 'quote_and_customer.html'

    def forms_valid(self, form, inlines):
        form.instance.customerauthor = ExtendedUser.objects.get(user=self.request.user)
        return super().forms_valid(form,inlines)

Все это работает отлично, за исключением того, что я не могу сохранить автора для модели Vue_Quote... Я всегда получаю "None":

Изображение Vue_Quote.author = None из моей формы

Я пробовал широкий спектр решений, но не могу решить эту проблему, и я нахожу очень мало документации по django-extra-views для поддержки моих поисков решения.

Любая помощь будет высоко оценена!

Помогите, я посмотрел исходный код и попытался разобраться... Это действительно абстрактно и много наследования

Вот мое лучшее предположение:

   def forms_valid(self, form, inlines):
        user = ExtendedUser.objects.get(user=self.request.user)
        form.instance.customerauthor = user
        for i in inlines:
            i.instance.author = user
        return super().forms_valid(form,inlines)

Или если вы хотите также определить поле Customer в этом forms_valid, вы можете сделать это после вызова super

Вы можете попробовать что-то вроде этого:

   def forms_valid(self, form, inlines):
        user = ExtendedUser.objects.get(user=self.request.user)
        form.instance.customerauthor = user
        customerObj = super().forms_valid(form,inlines)
        for i in inlines:
            i.instance.author = user
            i.instance.Customer = customerObj
        return customerObj
Вернуться на верх