Vì vậy, đây là một ví dụ tôi có, một trang web tổ chức mọi người vào các phòng ban với mỗi bộ phận đặt hàng. Khái niệm tương tự như vấn đề của bạn nhưng với các mô hình khác nhau. Ví dụ này sử dụng nhiều-nhiều từ bảng.
class Department(models.Model):
slug = models.SlugField(
verbose_name = _(u'Slug'),
help_text = _(u'Uri identifier for this department.'),
max_length=255
)
name = models.CharField(
verbose_name = _(u'Department Name'),
help_text = _(u'The department\'s name.'),
max_length = 255
)
description = models.TextField(
verbose_name = _(u'Description'),
help_text = _(u'Department\'s description')
)
people = models.ManyToManyField(
Person,
through = 'DepartmentPeople',
related_name = 'people',
verbose_name = _(u'People'),
help_text = _(u'People in this Department')
)
order_by = models.IntegerField(
verbose_name = _(u'Ordering Weight'),
help_text = _(u'This item\'s weight within a list.'),
max_length = 255
)
class Meta:
verbose_name = _(u"Department")
verbose_name_plural = _(u"Departments")
ordering = ['order_by',]
def people_list(self):
return [dp.person for dp in DepartmentPeople.objects.filter(department=self).order_by('order')]
def __unicode__(self):
return self.name
Và mô hình thông qua:
class DepartmentPeople(models.Model):
person = models.ForeignKey(
Person,
verbose_name = _(u'Person'),
help_text = _(u'Person is a member of this deparment.'),
)
department = models.ForeignKey(
Department,
verbose_name = _(u'Department'),
help_text = _(u'Pseron is a member of this department.'),
)
order = models.IntegerField(
verbose_name = _(u'Order'),
help_text = _(u'What order to display this person within the department.'),
max_length = 255
)
class Meta:
verbose_name = _(u"Department Person")
verbose_name_plural = _(u"Department People")
ordering = ['order',]
def __unicode__(self):
return self.person.first_name + " " + self.person.last_name + " is a member of " + self.department.name + (" in position %d" % self.order)
Và admin:
class DepartmentPeopleInline(admin.TabularInline):
model = DepartmentPeople
extra = 1
class DepartmentAdmin(admin.ModelAdmin):
inlines = (DepartmentPeopleInline,)
admin.site.register(Person, PersonAdmin)
admin.site.register(Department, DepartmentAdmin)
YÊU CẦU TRÊN BÌNH:
Lưu ý: sau đây là PersonAdmin của tôi, nhưng nó không cần thiết phức tạp cho ví dụ này. bạn có thể nhận được bởi với một đơn giản
class PersonAdmin(admin.ModelAdmin) :
pass
NHƯNG đây là những gì tôi đang sử dụng trong ứng dụng của tôi:
class PersonForm(forms.ModelForm):
abstract = forms.CharField(
widget=TinyMCE(attrs={'cols': 80, 'rows': 30})
)
class Meta:
model = Person
class PersonAdmin(reversion.VersionAdmin):
form = PersonForm
# The Form Fieldsets
fieldsets = [
(
None,
{
'fields' : [('first_name', 'last_name', 'post_nominal',), 'slug', 'title', 'headshot', 'large_photo', ('email', 'phone',), 'abstract']
},
)
]
# Prepopulated fields
prepopulated_fields = {'slug': ('first_name', 'last_name', 'post_nominal',)}
# Fields that are readonly
#readonly_fields = ('slug',)
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'headshot':
request = kwargs.pop("request", None)
kwargs['widget'] = AdminImageWidget
return db_field.formfield(**kwargs)
return super(PersonAdmin, self).formfield_for_dbfield(db_field, **kwargs)
Tôi có đặt mã Quản trị bên cạnh sổ đăng ký không? xin lỗi tôi là noob ở Django –
Tôi sẽ kiểm tra nó tối nay, có vẻ như Good –
Bạn cần phải đặt định nghĩa lớp quản trị của bạn trước khi bạn đăng ký chúng. Tôi đã chỉnh sửa câu trả lời của mình để hiển thị như thế nào. –