Size: a a a

Django [ru] #STAY HOME

2019 November 08

yh

yasya huyase in Django [ru] #STAY HOME
hunnidolla
Значит неправильно написал,проблем быть не должно
Конструктивно
источник

I

Igor in Django [ru] #STAY HOME
Ребят, можете подсказать, из-за чего ошибка?
class Calculation(models.Model):
 release       = models.OneToOneField("Release", on_delete=models.SET_NULL, blank=True, null=True, related_name="calculation")
class Release(models.Model):
 def save(self, *args, **kwargs):
   super().save(*args, **kwargs)
   if not self.calculation:
       Calculation.objects.create(release=self)
При сохранении Release, говорит, что в нем нет поляя calculation. Или как сделать reverse access in one to one fields?
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Igor
Ребят, можете подсказать, из-за чего ошибка?
class Calculation(models.Model):
 release       = models.OneToOneField("Release", on_delete=models.SET_NULL, blank=True, null=True, related_name="calculation")
class Release(models.Model):
 def save(self, *args, **kwargs):
   super().save(*args, **kwargs)
   if not self.calculation:
       Calculation.objects.create(release=self)
При сохранении Release, говорит, что в нем нет поляя calculation. Или как сделать reverse access in one to one fields?
покажи как сохраняешь
источник

I

Igor in Django [ru] #STAY HOME
в админке кнопку нажимаю
источник

I

Igor in Django [ru] #STAY HOME
проблема началась после того, как поставил if
источник

I

Igor in Django [ru] #STAY HOME
class BaseModelAdmin(admin.ModelAdmin):
   def save_model(self, request, obj, form, change):
       user = request.user
       instance = form.save(commit=False)
       if not change or not instance.user:
           instance.created = datetime.datetime.now()
           instance.user = user
       elif instance.user:
           instance.edited = datetime.datetime.now()
       try:
           instance.save()
           form.save_m2m()
       except Exception as err:
           self.message_user(request, str(err), level=messages.ERROR)
           return HttpResponseRedirect("..")
       return instance

   def save_formset(self, request, form, formset, change):
       instances = formset.save(commit=False)
       for obj in formset.deleted_objects:
           obj.delete()
       for instance in instances:
           instance.created = datetime.datetime.now()
           instance.user = request.user
           try:
               instance.save()
           except Exception as err:
               self.message_user(request, str(err), level=messages.ERROR)
               return HttpResponseRedirect("..")
       try:
           formset.save_m2m()
       except Exception as err:
           self.message_user(request, str(err), level=messages.ERROR)
           return HttpResponseRedirect("..")
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Igor
в админке кнопку нажимаю
я про другое)

если сохраняешь в админке Release, то:
```
release_object.calculation = ...
release_object.calculation.save()
источник

I

Igor in Django [ru] #STAY HOME
что?
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Igor
проблема началась после того, как поставил if
сразу не понял)
а ошибку покажи. У меня все стандартно работает
источник

I

Igor in Django [ru] #STAY HOME
RelatedObjectDoesNotExist
источник

I

Igor in Django [ru] #STAY HOME
Release has no calculation.
источник

Л

Лучший ник in Django [ru] #STAY HOME
Igor
class BaseModelAdmin(admin.ModelAdmin):
   def save_model(self, request, obj, form, change):
       user = request.user
       instance = form.save(commit=False)
       if not change or not instance.user:
           instance.created = datetime.datetime.now()
           instance.user = user
       elif instance.user:
           instance.edited = datetime.datetime.now()
       try:
           instance.save()
           form.save_m2m()
       except Exception as err:
           self.message_user(request, str(err), level=messages.ERROR)
           return HttpResponseRedirect("..")
       return instance

   def save_formset(self, request, form, formset, change):
       instances = formset.save(commit=False)
       for obj in formset.deleted_objects:
           obj.delete()
       for instance in instances:
           instance.created = datetime.datetime.now()
           instance.user = request.user
           try:
               instance.save()
           except Exception as err:
               self.message_user(request, str(err), level=messages.ERROR)
               return HttpResponseRedirect("..")
       try:
           formset.save_m2m()
       except Exception as err:
           self.message_user(request, str(err), level=messages.ERROR)
           return HttpResponseRedirect("..")
Я думаю  проблема в последнем try
источник

I

Igor in Django [ru] #STAY HOME
я его закомментировал
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
попробуй
if not getattr(self, 'calculation'):
  Calculation.objects.create(release=self)
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
связь еще не создана, вот и не может ее проверить
источник

I

Igor in Django [ru] #STAY HOME
тогда getattr не поможет
источник

I

Igor in Django [ru] #STAY HOME
а если try except?
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Igor
тогда getattr не поможет
в default допиши None
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
getattr(self, calc, None)
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
не найдет - будет None и создастся Calculation )
источник