Получение ошибки при использовании пользовательского поля manytomany при сохранении в админке django

У меня проблема в админке django. Когда я отправляю свои формы в django admin, я получаю

Невозможно присвоить "<QuerySet [<ProductAttributeValue: color : red>, <ProductAttributeValue: size : L>]>": "StockJoinProductAttributeValue.prod_att_value" должен быть экземпляром "ProductAttributeValue".

.

Я знаю проблему. Здесь я должен передать объект, а не набор запросов. Но я не знаю, как это сделать.

models.py

class Stock(models.Model):
#Implement dynamic select options
    sku = models.ForeignKey(SubProduct, on_delete=models.PROTECT, related_name="sub_product", default=1)
    product_attribute_value_id = models.ManyToManyField(ProductAttributeValue, blank=True,
        related_name="product_attribute_value", through="StockJoinProductAttributeValue"
    )
    is_default = models.BooleanField(default=False, 
        verbose_name=_("Default selection"),
        help_text=_("format: true=stock visible")
        )
    units = models.IntegerField(
        default=1,
        unique=False, 
        null=False,
        blank=False,
        verbose_name=_("units/ qty of stock"),
        help_text=_("format: required, default=0")
    )
    units_sold = models.IntegerField(
        default=0,
        unique=False, 
        null=False,
        blank=False,
        verbose_name=_("units/ qty of sold products"),
        help_text=_("format: required, default=0")
    )

    def __str__(self):
        return '{}'.format(self.sku)


class ProductAttributeValue(models.Model):
    product_attribute = models.ForeignKey(
        ProductAttribute, 
        on_delete=models.PROTECT,
        related_name="product_attribute")
    attribute_value = models.CharField(
        max_length=255,
        unique=True,
        null=False,
        blank=False,
        verbose_name=_("attribute value"),
        help_text=_("format: required, max-255")
    )
    class Meta:
        ordering = ['product_attribute']

    def save(self, *args, **kwargs):
        self.attribute_value = self.attribute_value.lower()
        return super().save(*args, **kwargs)

    def __str__(self):
        return '{} : {}'.format(self.product_attribute.name, self.attribute_value)

class StockJoinProductAttributeValue(models.Model):
    stock_id = models.ForeignKey(Stock, models.PROTECT)
    prod_att_value = models.ForeignKey(ProductAttributeValue, on_delete=models.PROTECT)


    class Meta:
        unique_together = ['prod_att_value', 'stock_id']
<
class StockJoinProductAttributeValueForm(forms.ModelForm):

    class Meta:
        model = StockJoinProductAttributeValue
        fields = ['stock_id','prod_att_value']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
    
        self.fields['prod_att_value'] = forms.ModelMultipleChoiceField(
            queryset=ProductAttributeValue.objects.all(),
        )

class StockJoinProductAttributeValueAdmin(admin.ModelAdmin):
    form = StockJoinProductAttributeValueForm

admin.site.register(StockJoinProductAttributeValue, StockJoinProductAttributeValueAdmin)

это ТаблицаStockJoinProductAttributeValue в admin

Вопрос в том, можно ли переопределить метод save в admin.py, перебирая объекты queryset и сохраняя их? Или вместо queryset=ProductAttributeValue.objects.all() есть ли способ передать объекты не queryset?

Вернуться на верх