Я уже немного устал от попытки связать профиль пользователя со статьями, которые он выбрал из таблиц. А именно, если user_1 выбирает product_1 и product_2, а user_2 выбирает product_1 и product_3, то оба пользователя будут назначены своим профилям product_1,2,3,1. Как я могу решить эту проблему, я уже попробовал отношения «ManyToMany, ForeignKey и OnetoOne», ища что-то вроде соединения OneToMany.
Модели:
class UserProd(models.Model):
#prod = models.OneToOneField(Products, on_delete=models.SET_NULL, null=True)
prod = models.ForeignKey(Products, on_delete=models.SET_NULL, null=True)
date = models.TimeField(auto_now_add=True)
diet_quantity = models.IntegerField(default=100)
unique_number = models.CharField(max_length=10)
class Diet(models.Model):
profile_user = models.ForeignKey(Profile, on_delete=models.SET_NULL, null=True)
date = models.TimeField(auto_now=True)
diet_prod = models.ManyToManyField(UserProd)
#diet_prod = models.OneToOneField(UserProd, on_delete=models.SET_NULL, null=True)
и функция просмотра:
@login_required
def add_prod_to_diet(request, pk):
user_profile = Profile.objects.get(user = request.user)
unique_number = user_profile.pk
product = Products.objects.filter(pk = pk).first()
user_product, prod_created = UserProd.objects.get_or_create(prod=product, unique_number=unique_number)
if not prod_created:
user_product.diet_quantity += product.quantity
user_product.save()
else:
user_product.diet_quantity=product.quantity
user_product.save()
user_diet, diet_created = Diet.objects.get_or_create(profile_user=user_profile)
if unique_number == request.user.pk:
user_diet.diet_prod.add(user_product)
if diet_created:
user_diet.unique_number = unique_number
user_diet.save()
messages.info(request, f"Product {product} has been added to your diet plan.")
return HttpResponse(status=204)