Как вторая модель может ссылаться на пользовательский экземпляр, который является внешним ключом в первой модели - PullRequest
0 голосов
/ 14 января 2020

У меня есть модель продукта, в которую входит пользователь (пользователь, который добавляет продукт)

class PreOrder(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
contact = models.CharField(max_length=15)
product = models.CharField(max_length=50)
quantity = models.IntegerField()
unit_of_measurement = models.CharField(max_length=20, blank=True, null=True)
expected_time = models.DateField()

def __str__(self):
    return self.product

и модель cartItem, которая ссылается на модель продукта (поле продукта) и владельца продукта (поле product_owner) ). Поле product_owner должно хранить информацию о владельце продукта, чтобы при каждом размещении заказа я узнавал владельца, чьи продукты покупаются.

class CartItem(models.Model):
cart = models.ForeignKey('Cart',null=True, blank =True,on_delete=models.CASCADE)
product = models.ForeignKey(Product,related_name="product", on_delete=models.CASCADE)
quantity=models.IntegerField(default=1)
product_owner=models.ForeignKey(User, related_name="owner", on_delete=models.CASCADE,blank=True,null=True)
line_total=models.DecimalField(max_digits=10, decimal_places=2, default=0.00)


def __str__(self):
    try:
        return str(self.cart.id)
    except:
        return self.product.title

в view.py Я попытался добавить владельца продукта, как в случае ниже

if request.method == "POST":
    qty = request.POST['qty']
    product= Product.objects.get(slug=slug)

    cart_item, created = CartItem.objects.get_or_create(cart=cart, product=product)

    cart_item.quantity = qty

    cart_item.product_owner = product.user
    cart_item.save()

, когда я отправляю локально, владелец добавляется в cartItem, но при сервер выдает ошибку: django .db.utils.ProgrammingError: столбец cart_cartitem.product_owner_id не существует LINE 1: ... rtitem "." product_id "," cart_cartitem "." amount "," cart_cart .. .

Каков наилучший способ добавить владельца продукта в корзину? Спасибо.

Ответы [ 2 ]

1 голос
/ 14 января 2020

Ошибка просто говорит о том, что столбец, в который он пытается сохранить данные, не существует.

django.db.utils.ProgrammingError: column cart_cartitem.product_owner_id does not exist LINE 1: ...rtitem"."product_id", "cart_cartitem"."quantity", "cart_cart...

Просто запустите в своем терминале и попробуйте снова.

python manage.py makemigrations
python manage.py migirate
0 голосов
/ 14 января 2020

Вы makemigrations и migrate?

Как следует из ошибки, столбец product_owner_id не существует. Таким образом, миграции не применяются к базе данных.

Каков наилучший способ добавить владельца продукта в cartItem?

То, как вы это делаете, хорошо .

Я бы пересмотрел в вашей модели CartItem , если product_owner должен иметь null=True.

...