相关疑难解决方法(0)

使用django admin进行一对多内联选择

我有一个标准的多对一关系设置.有很多字段,但就我们的目的而言,相关模型是:

class Class(models.Model):
    name = models.CharField(max_length=128)

class Student(models.Model):
    class = models.ForeignKey(Class)
    name = models.CharField(max_length=128)
    address = models.CharField(max_length=128)
    # ...etc
Run Code Online (Sandbox Code Playgroud)

我创建了一个管理员,它运行得很好.在我编辑学生时,它甚至可以自动设置班级.但是,当我去创建/编辑一个类时,我得到的只是名称的输入框.

有没有办法添加一个框/字段,可以从Class管理页面添加学生作为Class的成员?我可以在线创建一个表单,但那就是创建新的学生.我已经创建了所有学生,我只是在寻找一种快速方法,将多个现有学生添加到不同的班级.

python django django-models django-admin

52
推荐指数
2
解决办法
2万
查看次数

使用django admin中的raw_id_fields添加链接到更改页面

有没有机会在django admin中添加链接到'raw_id_fields'旁边的外键对象的页面?我使用raw_id_fields来减少对mysql的查询次数.当我不使用raw_id_fields时,我可以编辑或添加外键对象.

如何用raw_id_fields做到这一点?

@AntoinePinsard,我尝试了第二种解决方案."Edit My FK"字段已创建,但除了连字符外什么也没有.

那是我的模式.

class FlatAdmin(admin.ModelAdmin):
    inlines = [NeedInline]
    readonly_fields = ('flat_house_edit_link',)
    raw_id_fields = ('flat_house',)
    list_display = ('show_date','show_block','show_house','show_rooms','show_price','show_stage')
    list_filter = ('flat_house__house_block','flat_rooms')
    search_fields = ('flat_house__id',)

    field = ['flat_house','flat_house_edit_link','flat_owner','flat_price','flat_rooms','flat_total_sq','flat_life_sq','flat_kitchen_sq','flat_floors']

    def flat_house_edit_link(self, instance):
        if instance:
            fk_id = instance.user_id
        else:
            fk_id = None
        if fk_id:
            opts = instance._meta.get_field('flat_house').rel.model._meta
            related_url = reverse(
                'admin:{}_{}_change/?_to_field=id&_popup=1'.format(
                     opts.ha,
                     opts.house,
                ),
                args=[fk_id],
            )
            return format_html(
                 '<a target=_blank href="{}">Go!</a>', related_url)
        else:
            return "No related object"
    flat_house_edit_link.short_description = "Change house"
admin.site.register(Flat,FlatAdmin)
Run Code Online (Sandbox Code Playgroud)

django django-admin

5
推荐指数
1
解决办法
1581
查看次数

使用 django admin 2018 更新的一对多内联选择

我遇到了与此处此处描述的相同的问题。

简而言之:我有 2 个模型:BookShelf. 在管理表单(“添加书架”)中,我想从图书馆中已有的书籍中进行选择。默认情况下这是不可用的。

我使用了解决方案(来自上面的链接)并且一切正常,直到我尝试“保存”新对象。

错误:

未保存的模型实例 (Shelf: ShelfAlpha) 不能用于 ORM 查询。

#models.py
class Book(models.Model):
    shelf = models.ForeignKey(Shelf, blank=True, null=True,
        related_name="in_shelf")

#admin.py
class ShelfForm(forms.ModelForm):
    class Meta:
        model = Shelf

    books = forms.ModelMultipleChoiceField(queryset=Book.objects.all())

    def __init__(self, *args, **kwargs):
        super(ShelfForm, self).__init__(*args, **kwargs)
        if self.instance:
            if self.instance.in_shelf:
                self.fields['books'].initial = self.instance.in_shelf.all()
            else:
                self.fields['books'].initial = []

    def save(self, *args, **kwargs):    
        instance = super(ShelfForm, self).save(commit=False)
        self.fields['books'].initial.update(shelf=None)
        self.cleaned_data['books'].update(shelf=instance)
        return instance
Run Code Online (Sandbox Code Playgroud)

似乎在 2014 年工作,但现在不是。

我将不胜感激!

python django django-models django-forms django-admin

5
推荐指数
0
解决办法
253
查看次数