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

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

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

问题

以下是已翻译的内容:

我有一个具有2个属性的模型其值取决于相关项

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

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

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

    def save_model(self, request, obj, form, change):
        super().save_model(request, obj, form, change)
        obj.rating = get_rating(obj)
        obj.count = get_count(obj)
        obj.save()

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


<details>
<summary>英文:</summary>

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)


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
]

def save_model(self, request, obj, form, change):
    super().save_model(request, obj, form, change)
    obj.rating = get_rating(obj)
    obj.count = get_count(obj)
    obj.save()

How can I access object and make changes in model instance in save_related?

</details>


# 答案1
**得分**: 2

你正在尝试的事情是访问`OfferAdmin`中的内联数据。

你可以这样做:

```python
def save_related(self, request, form, formsets, change):
    obj = form.instance
    # 对模型实例进行更改
    obj.save()
    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

def save_related(self, request, form, formsets, change):
    obj = form.instance
    # make changes to model instance
    obj.save()
    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:

确定