【发布时间】:2016-11-30 02:02:22
【问题描述】:
我创建了一个子模型,它有一个与父模型相关的ForeignKey 实例“父”。我想将一个孩子与 Post 联系起来。为此,在我的表单中,我为“父”字段创建了一个ModelChoiceField。因此,为了在我的模板中呈现它,我将一些内容作为我的以下代码。当我运行代码时,它会引发错误:
TypeError : str 返回非字符串(UUID 类型)。
如果能帮助我解决此错误,我将不胜感激。
这是我的代码:
模型.py:
class Parent(models.Model):
parent_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
from1 = models.CharField(max_length=20)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
objects = ParentManager()
def __str__(self):
return self.parent_id
def get_absolute_url(self):
return reverse("detail", kwargs={"id": self.parent_id})
class Child(models.Model):
child_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
parent = models.ForeignKey(Parent, default=uuid.uuid4, related_name='childs' )
user = models.OneToOneField(settings.AUTH_USER_MODEL, null=True, blank=True, unique=False)
amount = models.IntegerField()
def get_absolute_url(self):
return reverse("accept_child", kwargs={"child_id": self.child_id})
def __unicode__(self):
return self.amount
def __str__(self):
return self.amount
forms.py:
class ChildForm(forms.ModelForm):
parent = forms.ModelChoiceField(queryset= Parent.objects.all(), label="Parent", widget=forms.RadioSelect(), initial=0)
amount = forms.IntegerField(help_text='Place the child for a Parent')
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(ChildForm, self).__init__(*args, **kwargs)
self.fields['parent'].queryset = Parent.objects.all()
class Meta:
model = Child
fields = ["amount"]
模板:
<td > {% for choice in form.parent.field.choices %}
<li><input type="radio" name="{{ choice.parent }}" value="{{ choice.0 }}" />
<label for="">{{choice.1}}</label></li>
{% endfor %}</td>
更新 1:
views.py:
def live_bid_truck(request):
form = ChildForm(request.POST or None)
if form.is_valid():
child = form.save(commit=False)
print(form.cleaned_data.get("amount"))
child.user = request.user # YOU SET THE USER
child.parent = ?? # I DON'T HOW TO SET THE PARENT HERE,
child.save()
print(child.parent.id)
【问题讨论】:
-
您需要在您的
ChildForm中使用self.fields['parent'].queryset = Parent.objects.all()。注意()。 -
谢谢。我错过了括号。现在,我收到一个错误:str 返回非字符串(UUID 类型),因为我使用 UUID 作为主键。我可以知道我为什么会得到这个吗?
-
将其用作 str(uuid 字段)。
-
恕我直言,最好在另一个问题中问这个,以避免污染。或者您可以更改您原来的问题。
-
@PiyushS.Wanare 我应该在我的父模型中保留 str(uuid field) 吗?
标签: django django-models django-forms django-templates