gpt4 book ai didi

django - 使用related_name在django admin中配置多对多字段

转载 作者:行者123 更新时间:2023-12-04 07:39:04 25 4
gpt4 key购买 nike

我在djando 1.5中定义了以下模型和管理员。这是子网和VLAN之间的多对多关系。我在ManyToMany字段中使用related_name选项,以便能够从相关子网对象中获取VLAN的集合。从管理员向子网添加子网效果很好。但是,当我尝试向子网管理员添加horizo​​ntal_filer以便将van添加到其vlan集时,我收到一条错误消息,指出vlans属性不存在。我在某些 View 中使用子网对象,并且可以正确访问vlans属性。

我在这里做错了什么?我见过类似的帖子,但是我无法成功地采用任何建议的解决方案。

谢谢你的帮助

模型

from django.db import models

class Subnet(models.Model):
networkAddress = models.CharField(max_length=15)
size = models.IntegerField()

def __unicode__(self):
return "%s/%s" % (self.networkAddress, self.size)

class IpAddress(models.Model):
ipAddress = models.CharField(max_length=15)
subnet = models.ForeignKey(Subnet)

def __unicode__(self):
return "%s" % (self.ipAddress)

class Vlan(models.Model):
number = models.IntegerField()
description = models.CharField(max_length=150)
subnets = models.ManyToManyField(Subnet, related_name='vlans', blank=True)

def __unicode__(self):
return "VLAN %s (%s)" % (self.number, self.description)

管理员
from network.models import Subnet, IpAddress, Vlan
from django.contrib import admin

class SubnetAdmin(admin.ModelAdmin):
filter_horizontal = ('vlans',)

admin.site.register(Subnet, SubnetAdmin)
admin.site.register(IpAddress)
admin.site.register(Vlan)

和我得到的错误
Request Method:     GET
Request URL: http://127.0.0.1:8000/admin/
Django Version: 1.5.2
Exception Type: ImproperlyConfigured
Exception Value:

'SubnetAdmin.filter_horizontal' refers to field 'vlans' that is missing from model 'network.Subnet'.

最佳答案

显然,这是一个8 year old feature request。有django-admin-extend。或者,您可以只抛出like this in there:

from django.contrib import admin as admin_module

class SiteForm(ModelForm):
user_profiles = forms.ModelMultipleChoiceField(
label='Users granted access',
queryset=UserProfile.objects.all(),
required=False,
help_text='Admin users (who can access everything) not listed separately',
widget=admin_module.widgets.FilteredSelectMultiple('user profiles', False))

class SiteAdmin(admin_module.ModelAdmin):
fields = ('user_profiles',)

def save_model(self, request, obj, form, change):
# save without m2m field (can't save them until obj has id)
super(SiteAdmin, self).save_model(request, obj, form, change)
# if that worked, deal with m2m field
obj.user_profiles.clear()
for user_profile in form.cleaned_data['user_profiles']:
obj.user_profiles.add(user_profile)

def get_form(self, request, obj=None, **kwargs):
if obj:
self.form.base_fields['user_profiles'].initial = [ o.pk for o in obj.userprofile_set.all() ]
else:
self.form.base_fields['user_profiles'].initial = []
return super(SiteAdmin, self).get_form(request, obj, **kwargs)

filter_horizontal元组中指定它时,应该会给您一个 fields

关于django - 使用related_name在django admin中配置多对多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com