我有这样的日程表和事件模型。
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'的外键,我也没有找到解决管理中反向查找的方法。
什么是正确的方法?
答案 0 :(得分:0)
因此,当我向事件添加计划时,我希望计划str方法在管理表单中返回相关的Event.name字段,而不仅仅是'一些无聊的值'就像现在一样。
将related_name='event'
添加到您的models.OneToOneField
关系中,这样您就可以将return 'Some boring value'
替换为return self.event.name
。
至于:
我也只想将一个计划对象一次分配给一个事件,而不是管理员显示其他事件的其他计划列表 - 我必须禁用添加和编辑功能,如果将一个计划添加到事件
目前还不清楚你想要达到的目标。