Djnago Добавление объектов ManytoMany к объекту после его создания
Я пытаюсь добавить поле "многие ко многим" к объекту после его создания, но постоянно сталкиваюсь с одной и той же ошибкой: Прямое присвоение прямой стороне множества "многие ко многим" запрещено. Вместо этого используйте dogs.set().
в моем models.py
class linkedDog(models.Model):
linked_dog = models.ForeignKey(Dog, blank=True, null=True, on_delete=models.CASCADE)
service_chosen = models.ManyToManyField(Service, blank=True)
shampoos_chosen = models.ManyToManyField(Shampoo, blank=True)
total_time = models.IntegerField(blank=True, default=0)
class PsuedoAppointment(models.Model):
client = models.ForeignKey(User, blank=False, on_delete=models.CASCADE)
dogs = models.ManyToManyField(linkedDog, blank=True)
total_time = models.IntegerField(blank=False, default=0)
Я пытаюсь добавить объект linkedDog к полю dogs в моих представлениях. Я использовал этот вопрос в качестве ссылки
Но не могу понять, что я делаю по-другому или где все идет не так
@login_required
def loggedin_appointment_view(request):
if request.method == "POST":
form = linkedDogForm(request.POST, user=request.user)
if form.is_valid():
dog = form.save()
dog_id = dog.id
dogsquery = linkedDog.objects.filter(id=dog_id)
appointment = PsuedoAppointment.objects.create(client=request.user, dogs=None, total_time=None)
for dog in dogsquery:
appointment.dogs.add(dog)
return render(request, 'home.html')
else:
dog_form = linkedDogForm(user=request.user)
return render(request, "appointment_template/loggedin_appointmentmaker.html", context={'dog_form' : dog_form})
Я также пробовал
dog = form.save()
dog_id = dog.id
dogsquery = linkedDog.objects.filter(id=dog_id)
appointment = PsuedoAppointment.objects.create(client=request.user, dogs=None, total_time=None)
appointment.dogs.set(dogsquery)
You should remove the dogs=None. Furthermore total_time can not be None, since it is a non-NULLable field, you can set this to 0 for or omit it from the .create(…) call [Django-doc]:
appointment = PsuedoAppointment.objects.create(
client=request.user # no dogs=None
)
for dog in dogsquery:
appointment.dogs.add(dog)