Обновление объекта, связанного с двумя другими по foreignKey и OneToOneKey соответственно, не работает в django
Вот модель объекта, который я хочу обновить:
class Abonnement(models.Model):
client = models.ForeignKey('Client', on_delete=models.CASCADE, related_name="abonnements")
compteur = models.OneToOneField(Compteur, on_delete=models.CASCADE,related_name="abonnement")
adresse = models.CharField(max_length=200, blank=True, null=True)
point_service = models.CharField(max_length=200, null=True, blank=True)
lat_machine = models.FloatField(default=0.0)
lon_machine = models.FloatField(default=0.0)
Модель Client связана с этой моделью внешним ключом, а модель Compteur - ключом OneToOne
.
Извлечение объекта из поля OneToOne не представляет проблемы. Но когда я пытаюсь обновить, это не работает
.
Вот что я делаю в контроллере:
compteur = get_object_or_404(Compteur,pk=request.POST["deveui"])
a = compteur.abonnement
a.point_service = form.cleaned_data["pointservice"]
a.lat_machine = form.cleaned_data["latitude"]
a.lon_machine = form.cleaned_data["latitude"]
a.save()
Я также пытаюсь сделать это другим способом, но ничего не меняется, редактирование по-прежнему не работает
compteur = get_object_or_404(Machine,pk=request.POST["deveui"])
a = Abonnement.objects.get(compteur=compteur)
a.point_service = form.cleaned_data["pointservice"]
a.lat_machine = form.cleaned_data["latitude"]
a.lon_machine = form.cleaned_data["latitude"]
a.save()
Возможно, ваш form.cleaned_data
не содержит значений, которые вы ожидаете, потому что какая-то валидация не прошла (См. документацию: "Если ваши данные не прошли валидацию, словарь clean_data содержит только валидные поля" - https://docs.djangoproject.com/en/4.1/ref/forms/api/).
Кроме того, кажется странным, что вы присваиваете одно и то же значение ("широта") и a.lat_machine
, и a.lon_machine
.
Наконец, попробуйте получить журнал ошибок с сервера, когда вы отправляете форму. Если вы используете сервер разработки Django'd, вы должны быть в состоянии увидеть ошибки в терминале, из которого вы запускаете сервер.