Получение ошибки при использовании пользовательского поля 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?