DsTProductAttributes.product должен быть экземпляром DsTProductCompany Django

Это мое первое сообщение на Stack Overflow, я задаю вопрос, на который, очевидно, уже был дан ответ, но я не могу найти решение для моего конкретного случая.

Я новичок в Django, поэтому, пожалуйста, не будьте слишком строги.

Заранее большое спасибо за то, что прочитали мой пост.

Любые советы или указания будут высоко оценены.

A.


Я получаю эту ошибку:

Cannot assign "2": "DsTProductAttributes.product" must be a "DsTProductCompany" instance.

Вот соответствующий код из models.py

class DsTProductAttributes(models.Model):
product_attribute_id = models.BigAutoField(primary_key=True)
product = models.ForeignKey('DsTProductCompany', models.DO_NOTHING)
attribute = models.ForeignKey(DsTAttribute, models.DO_NOTHING)
value = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
dw_load = models.DateTimeField(blank=True, null=True)
dw_deleted = models.IntegerField(blank=True, null=True)
dw_deleted_time = models.DateTimeField(blank=True, null=True)
dw_last_touch = models.DateTimeField(blank=True, null=True)
dw_last_touch_by = models.CharField(max_length=200, blank=True, null=True)

class Meta:
    managed = False
    db_table = 'ds_t_product_attributes'

class DsTProductCompany(models.Model):
product_id = models.BigAutoField(primary_key=True)
product_code = models.CharField(max_length=200, blank=True, null=True)
description = models.CharField(max_length=200, blank=True, null=True)
ean_code = models.CharField(max_length=200, blank=True, null=True)
dw_load = models.DateTimeField(blank=True, null=True)
dw_deleted = models.IntegerField(blank=True, null=True)
dw_deleted_time = models.DateTimeField(blank=True, null=True)
dw_last_touch = models.DateTimeField(blank=True, null=True)
dw_last_touch_by = models.CharField(max_length=200, blank=True, null=True)

class Meta:
    managed = False
    db_table = 'ds_t_product_company'

Вот соответствующий код из forms.py

class ProductAttributesForm(ModelForm):

def __init__(self, *args, **kwargs):
    super(ProductAttributesForm, self).__init__(*args, **kwargs)
    attribute = DsTAttribute.objects.all()
    attribute_id = [(i.attribute_id, i.attribute_code) for i in attribute]
    self.fields['attribute_id'] = forms.ChoiceField(choices=attribute_id)

product = forms.IntegerField(
        widget=forms.HiddenInput()
)

class Meta:
    model = DsTProductAttributes
    fields = ['product', 'value']

Вот соответствующий код из файла views.py

def productAttributeCreate(request, pk):
form = ProductAttributesForm()
product_id = pk
form.fields['product'].initial = product_id
btnValue = "Create"

if request.method == "POST":
    form = ProductAttributesForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()
        return redirect('products')

context = {'form': form, 'btnValue': btnValue, 'product_id': product_id}

return render(request, 'base/product_attributes/product_attributes_form.html', context)

здесь используется шаблон:

{% extends 'base/main.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block content %}

<br />

<div class="container-fluid">
    <form action="" method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        {{form.media}}
        {{form|crispy}}
        <input class="btn btn-success" type="submit" value="{{btnValue}}">
    </form>
</div>

<br/>

<center><a class="btn btn-primary btn-lg" href="{% url 'product' product_id %}" role="button">Back</a></center>

{% endblock content %}

Вот полный отслеживание:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/create_product_attribute/2

Django Version: 3.2.7
Python Version: 3.8.7
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'base.apps.BaseConfig',
 'django_filters',
 'crispy_forms']
Installed Middleware:
['whitenoise.middleware.WhiteNoiseMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "C:\Users\stefa\PycharmProjects\Dashboard\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\stefa\PycharmProjects\Dashboard\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\stefa\PycharmProjects\Dashboard\dashboard\base\views.py", line 46, in productAttributeCreate
    if form.is_valid():
  File "C:\Users\stefa\PycharmProjects\Dashboard\venv\lib\site-packages\django\forms\forms.py", line 175, in is_valid
    return self.is_bound and not self.errors
  File "C:\Users\stefa\PycharmProjects\Dashboard\venv\lib\site-packages\django\forms\forms.py", line 170, in errors
    self.full_clean()
  File "C:\Users\stefa\PycharmProjects\Dashboard\venv\lib\site-packages\django\forms\forms.py", line 374, in full_clean
    self._post_clean()
  File "C:\Users\stefa\PycharmProjects\Dashboard\venv\lib\site-packages\django\forms\models.py", line 408, in _post_clean
    self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude)
  File "C:\Users\stefa\PycharmProjects\Dashboard\venv\lib\site-packages\django\forms\models.py", line 63, in construct_instance
    f.save_form_data(instance, cleaned_data[f.name])
  File "C:\Users\stefa\PycharmProjects\Dashboard\venv\lib\site-packages\django\db\models\fields\__init__.py", line 910, in save_form_data
    setattr(instance, self.name, data)
  File "C:\Users\stefa\PycharmProjects\Dashboard\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 215, in __set__
    raise ValueError(

Exception Type: ValueError at /create_product_attribute/2
Exception Value: Cannot assign "2": "DsTProductAttributes.product" must be a "DsTProductCompany" instance.

Спасибо всем за ответы, однако я обнаружил проблему.

Логически говоря, в таблице ds_t_product_attributes и ds_t_product_company было установлено неправильное отношение.

После изменения все наладилось.

Спасибо всем

A.

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