Django在unicode方法中反向OneToOneField查找

时间:2016-11-17 19:21:42

标签: python django

我有这样的日程表和事件模型。

class Schedule(models.Model):
    jan = models.FloatField(default=2.0)
    feb = models.FloatField(default=2.0)

    def __str__(self):
        return 'Some boring value'

class Event(models.Model):
    name = models.CharField(max_length=20)
    schedule = models.OneToOneField(schedule, null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

在我的管理视图中,我想以折叠方式在EventAdmin类中添加日程安排。

class ScheduleAdmin(admin.ModelAdmin):
    fieldsets = [
    ('Schedule', {'fields': ['jan','feb']}),
    ]      

class EventAdmin(admin.ModelAdmin):
    fieldsets = [
    ('Event', {'fields': ['name',]}),
    ('Add schedule', {'fields': ['jan','feb'], 'classes': ['collapse']}),
    ]

因此,当我向事件添加计划时,我希望计划 str 方法在管理表单中返回相关的Event.name字段,而不仅仅是“一些无聊的值”,因为它确实如此现在。

我也只想将一个计划对象一次分配给一个事件,而不是管理员显示其他事件的其他计划列表 - 我必须禁用添加和编辑功能,如果将一个计划添加到事件。

我有时会使用admin.TabularInline,也许我应该尝试使用这种方法,因为它也没有在admin中注册Schedules(我也不是真的对它感兴趣) - 但这会返回错误' Schedule没有Event'的外键,我也没有找到解决管理中反向查找的方法。

什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

  

因此,当我向事件添加计划时,我希望计划str方法在管理表单中返回相关的Event.name字段,而不仅仅是'一些无聊的值'就像现在一样。

related_name='event'添加到您的models.OneToOneField关系中,这样您就可以将return 'Some boring value'替换为return self.event.name

至于:

  

我也只想将一个计划对象一次分配给一个事件,而不是管理员显示其他事件的其他计划列表 - 我必须禁用添加和编辑功能,如果将一个计划添加到事件

目前还不清楚你想要达到的目标。