问题描述
在 django admin 中,我尝试使用模型表单和 django-autocomplete-light 库 dal library 将值从模型 MetaTag
预填充到模型 ModelSEOMetadatum
。
我的模型:
class MetaTag(models.Model):
name = models.CharField(max_length=50,null=True,blank=True)
property = models.CharField(max_length=50,blank=True)
def __str__(self):
if self.name !=None and self.property == None:
return str(self.name)
elif self.name == None and self.property != None:
return str(self.property)
else:
'name : ' + str(self.name) + ',property : ' + str(self.property)
class SEOMetadatum(models.Model):
class Meta:
verbose_name_plural = "SEO Metadata"
path = models.CharField(max_length=100,blank=True)
name = models.CharField(max_length=50,blank=True)
content = models.CharField(max_length=200,blank=True)
content_type = models.ForeignKey(ContentType,on_delete=models.CASCADE,blank=True)
object_id = models.UUIDField(null=True,blank=True)
content_object = GenericForeignKey('content_type','object_id')
class ModelSEOMetadatum(SEOMetadatum):
class Meta:
verbose_name_plural = "Model Metadata"
proxy = True
我的表格
class ModelSEOMetadatumForm(forms.ModelForm):
name = ModelChoiceField(required=False,queryset=MetaTag.objects.exclude(name__isnull=True).values_list('name',flat = True).distinct(),widget=autocomplete.ModelSelect2(url='SEO:name-autocomplete'))
class Meta:
model = ModelSEOMetadatum
fields = ('content_type','object_id','name','content','property')
我的管理员
@admin.register(ModelSEOMetadatum)
class ModelSEOMetadatumAdmin(admin.ModelAdmin):
list_display = ('id','property','content_object')
fields = ('content_type','property')
form = ModelSEOMetadatumForm
我的网址
urlpatterns = [
path('name-autocomplete/',NameAutocomplete.as_view(),name='name-autocomplete'),]
我的观点
class NameAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
if not self.request.user.is_authenticated:
return MetaTag.objects.none()
qs = MetaTag.objects.all()
if self.q:
qs = qs.filter(Q(name__istartswith=self.q) | Q(name__icontains=self.q))
return qs
name
模型的 MetaTag
字段的值在 /add 操作中正确加载
我的问题出在 /change 操作上。我无法正确编辑,出现错误:字段“id”需要一个数字,但得到“描述”。
我该如何解决?
在 cmd 中出现错误:
HTTP GET /admin/SEO/modelSEOMetadatum/34/change/ 500 []
ERROR HTTP GET /admin/SEO/modelSEOMetadatum/34/change/ 500 []
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)