Ich erstellte ein Child-Modell mit einer ForeignKey
Instanz 'parent' im Zusammenhang mit dem Parent-Modell. Ich wollte Post ein Kind zuordnen. Hierzu habe ich in meinen Formularen ein ModelChoiceField
für das Feld 'Eltern' erstellt. Um dies in meiner Vorlage darzustellen, mache ich etwas wie meinen untenstehenden Code. Wenn ich den Code ausgeführt wird, erhöht er einen Fehler:Python/Django: TypeError: __str__ gab nicht-string zurück (UUID-Typ)
TypeError : str returned non-string (type UUID).
Ich würde schätzen, mir diesen Fehler in Verlegenheit zu helfen.
Hier ist mein Code:
Models.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"]
Vorlage:
<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>
-Update-1:
views.py:
Verwenden folgenden Code, wenn Sie etwas in Ihrem Primärschlüsselfeld Tabelle auf der Grundlage der Primärschlüssel Annahme von Front-End schreiben wollen:
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)
Sie müssen 'self.fields [ 'Eltern'] verwenden queryset = Parent.objects.all()' im 'ChildForm'.. Beachte das '()'. –
Danke. Ich habe Klammern vergessen. Jetzt bekomme ich einen Fehler: __str__ gab nicht-string (Typ UUID) zurück, da ich UUID als Primärschlüssel verwendete. Darf ich wissen, warum ich das bekomme? – sumanth
Verwenden Sie es als Str (Uuid-Feld). –