小编Ton*_*nta的帖子

Django:扩展User时,最好使用OneToOneField(User)或ForeignKey(User,unique = True)?

我正在通过扩展Django User模型找到有关是否使用OneToOneField(User)ForeignKey(User, unique=True)创建UserProfile模型的相互矛盾的信息.

使用它更好吗?:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
Run Code Online (Sandbox Code Playgroud)

或这个?:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
Run Code Online (Sandbox Code Playgroud)

Django的文件规定OneToOneField,而Django的书例子使用ForeignKey.

詹姆斯贝内特也有两篇博客文章,也提供了相互矛盾的例子:

在前一篇文章中,Bennett提供了一些原因,为什么他转而使用ForeignKey而不是OneToOneField,但我不太明白,特别是当我看到推荐相反的其他帖子时.

我很想知道你的偏好和原因.或者,它甚至重要吗?

django django-models django-profiles django-users

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

Django管理员有条件内联?

我试图找出一种方法,只有当Person.is_member为True时才显示以下RelativeInline.

目前的admin.py:

class RelativeInline(admin.TabularInline):
    model = Relative
    fk_name = 'member'

class PersonAdmin(admin.ModelAdmin):
    inlines = [RelativeInline,]
    ordering = ('first_name',)
    list_filter = ('is_member',)
    search_fields = ('first_name', 'last_name',)
    date_hierarchy = 'member_date'
    list_display = ('first_name', 'last_name', 'is_member', 'member_date', 'photo')

admin.site.register(Person, PersonAdmin)
Run Code Online (Sandbox Code Playgroud)

我能找到的唯一提示是我可以覆盖get_formset,但我找不到一个好例子,所以我的微弱尝试不起作用.

这是我失败的尝试:

class RelativeInline(admin.TabularInline):
    model = Relative
    fk_name = 'member'

class PersonAdmin(admin.ModelAdmin):
    ordering = ('first_name',)
    list_filter = ('is_member',)
    search_fields = ('first_name', 'last_name',)
    date_hierarchy = 'member_date'
    list_display = ('first_name', 'last_name', 'is_member', 'member_date', 'photo')

    def get_formset(self, request, obj=None, **kwargs):
        if obj.is_member:
            inlines = [RelativeInline,]
        return …
Run Code Online (Sandbox Code Playgroud)

django conditional inline django-admin

7
推荐指数
1
解决办法
4760
查看次数