你可以在ModelAdmin类的save_related方法中访问模型实例。

huangapple go评论82阅读模式
英文:

How can I access model instance in save_related method of ModelAdmin class?

问题

以下是已翻译的内容:

  1. 我有一个具有2个属性的模型其值取决于相关项
  2. ```python
  3. class Offer(models.Model):
  4. rating = models.DecimalField(max_digits=3, decimal_places=1, default=0)
  5. count = models.IntegerField(default=0)

相关项在管理员页面中设置为模型的内联。我想在通过管理员页面添加新的相关项后执行两个函数。当我重写save_model方法时,新的相关项似乎尚未保存,因为save_related方法在save_model之后执行

  1. class OfferAdmin(admin.ModelAdmin):
  2. model = Offer
  3. inlines = [
  4. CommentInline
  5. ]
  6. def save_model(self, request, obj, form, change):
  7. super().save_model(request, obj, form, change)
  8. obj.rating = get_rating(obj)
  9. obj.count = get_count(obj)
  10. obj.save()

我如何在save_related中访问对象并对模型实例进行更改?

  1. <details>
  2. <summary>英文:</summary>
  3. I have a model with 2 attributes which value depends on related items:

class Offer(models.Model):
rating = models.DecimalField(max_digits=3, decimal_places=1, default=0)
count = models.IntegerField(default=0)

  1. Related items are set as inlines of model in admin page. I want to execute two functions after adding new related items via admin page. When I overwrite save_model method new related items are not saved yet as apparently save_related method executes after save_model

class OfferAdmin(admin.ModelAdmin):
model = Offer
inlines = [
CommentInline
]

  1. def save_model(self, request, obj, form, change):
  2. super().save_model(request, obj, form, change)
  3. obj.rating = get_rating(obj)
  4. obj.count = get_count(obj)
  5. obj.save()
  1. How can I access object and make changes in model instance in save_related?
  2. </details>
  3. # 答案1
  4. **得分**: 2
  5. 你正在尝试的事情是访问`OfferAdmin`中的内联数据。
  6. 你可以这样做:
  7. ```python
  8. def save_related(self, request, form, formsets, change):
  9. obj = form.instance
  10. # 对模型实例进行更改
  11. obj.save()
  12. super(OfferAdmin, self).save_related(request, form, formsets, change)

希望这有所帮助!

英文:

The thing you are trying to do here is accessing the inline data in the OfferAdmin

You can do something like

  1. def save_related(self, request, form, formsets, change):
  2. obj = form.instance
  3. # make changes to model instance
  4. obj.save()
  5. super(OfferAdmin, self).save_related(request, form, formsets, change)

Hope this helps!

huangapple
  • 本文由 发表于 2020年1月3日 22:39:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/59580458.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定