Ошибка The "Model" could not be created because the data didn't validate. Django

Рейтинг: 0Ответов: 1Опубликовано: 11.07.2023

Пишу приложение, для учета расходов. При создании расхода, в форме, есть поле "объект", где в выпадающем списке выводятся только те объекты, которые создал активный пользователь. Но при сохранении записи выходит ошибка. Не могу разобраться в чем тут дело.

Модель:

class PaymentMode(models.Model):
object = models.ForeignKey(
                            "dropdown.Object", 
                            on_delete=models.CASCADE, 
                            verbose_name="object",
                            blank=True, 
                            null=True,
                            )

des = models.ForeignKey(
                        Destination, 
                        on_delete=models.CASCADE, 
                        verbose_name='des',
                        )

cat = models.ForeignKey(
                        Category, 
                        on_delete=models.CASCADE, 
                        blank=True, 
                        null=True,
                        verbose_name='cat',
                        )

subcat_name = models.ForeignKey(
                                Subcategory, 
                                on_delete=models.CASCADE, 
                                verbose_name='subcat_name',
                                blank=True, 
                                null=True,
                                )

summ = models.PositiveIntegerField()

recipient = models.CharField(
                            ("Recipient"), 
                            max_length=50, 
                            blank=True, 
                            null=True,
                            )

comment = models.TextField(
                            ("Comment"), 
                            blank=True, 
                            null=True,
                            )

operation_date = models.DateTimeField(
                            auto_now=True, 
                            blank=True, 
                            null=True,
                            )

user = models.ForeignKey(
                        User, 
                        verbose_name=("user"), 
                        on_delete=models.CASCADE, 
                        blank=True, 
                        null=True,
                        )

deleted = models.BooleanField(
                        ("Deleted"), 
                        default=False,
                        )


def __str__(self):
    return f'{self.object} {self.cat} {self.comment}'

Вьюшка:

def add_operation(request):
if request.method == 'POST':
    form = PaymentModeForm(request.POST)
    
    if form.is_valid():
        # form.save(commit=False)
        pay = form.save(commit=False)
    pay.user_id = request.user.id 
    pay.save()
    return redirect('/manager/operations')
else:
    form = PaymentModeForm(user_id=request.user.id)
return render(request, 'dropdown/added_pay.html', {'form': form},) 

Форма:

class PaymentModeForm(forms.ModelForm):

object = forms.ModelChoiceField(label='Object', queryset=Object.objects.all())

def __init__(self, *args, **kwargs):
    user_id = kwargs.pop('user_id', None)
    super(PaymentModeForm, self).__init__(*args, **kwargs)
    self.fields['object'].queryset = Object.objects.filter(user_id=user_id)
    
class Meta:
    model = PaymentMode
    # fields = ['object']
    # fields = '__all__'
    fields = ('summ', 
              'recipient', 
              'object', 
              'des', 
              'cat', 
              'subcat_name', 
              'comment', 
            #   'user',
              )
    
cat = RestrictedModelChoiceField(
    Category.objects.all(),
    restrict_on_form_field="des",
    restrict_on_relation="allowedcombination__des",
)
subcat_name = RestrictedModelChoiceField(
    Subcategory.objects.all(),
    restrict_on_form_field="cat",
    restrict_on_relation="allowedcombination__cat",
)

Ответы

▲ 0

Разобрался, дело было в том, что в том месте, где стоит аргумент request.POST нужно было еще добавить user_id=request.user.id