Som nováčikom Django a zaujímalo sa ma, či by som moholzískajte nejakú pomoc. Snažím sa zobraziť formulár v mojej šablóne pre nástroj ToolCheckOut, ktorý bude mať dva cudzie kľúče, ktoré odkazujú na moje dva modely. Túto chybu stále dostávam a nemal som šťastie pri hľadaní riešenia. Chyba: "donútenie k Unicode: potreba reťazec alebo vyrovnávacia pamäť, dlho nájdená" dáva túto chybu na mojej šablóne pre tento riadok: "{{form.as_p}}"
Používam mysql db, ktorý som predtým vytvoril pre tento projekt.
forma:
class ToolCheckoutCreateForm(forms.ModelForm):
class Meta:
model = ToolTransaction
fields = [
"ToolID",
"Quantity",
"PartyID",
"CheckOutDate",
"CheckInDate",
]
modely:
class Tool(models.Model):
ToolID=models.CharField(max_length=100, primary_key = True, unique=True, null=False)
Quantity=models.IntegerField(null=False)
Location=models.CharField(max_length=100, null=False)
CategoryID=models.IntegerField(null=True)
Deleted=models.BooleanField(default=0)
objects=models.Manager()
class Meta:
managed=True
db_table="Tool"
def __unicode__(self):
return self.ToolID
def get_absolute_url(self):
return reverse("ToolSearch:toolSearchResults", kwargs={"pk": self.ToolID})
class Party(models.Model):
PartyID=models.AutoField(primary_key=True)
FirstName=models.CharField(max_length=100, null=False)
LastName=models.CharField(max_length=100, null=False)
PhoneNumber=models.CharField(max_length=25, null=False)
Organization=models.CharField(max_length=100, null=True)
Deleted=models.BooleanField(default=0)
objects=models.Manager()
class Meta:
managed=True
db_table="Party"
def __unicode__(self):
return self.PartyID
def get_absolute_url(self):
return reverse("ToolSearch:borrowerUpdate", kwargs={"pk": self.PartyID})
class ToolTransaction(models.Model):
CheckOutID=models.AutoField(primary_key=True)
ToolID=models.ForeignKey(Tool, on_delete=models.CASCADE)
PartyID=models.ForeignKey(Party, on_delete=models.CASCADE)
Quantity=models.IntegerField(null=False)
CheckOutDate=models.DateField(null=False)
CheckInDate=models.DateField(null=True)
Deleted=models.BooleanField(default=0)
objects=models.Manager()
class Meta:
managed=True
db_table="ToolTransaction"
ordering=("CheckOutID",)
def __unicode__(self):
return str(self.CheckOutID) or u""
def get_absolute_url(self):
return reverse("ToolSearch:toolCheckout", kwargs={"pk": self.CheckOutID})
šablóna:
<form method = "POST" action="">
{% csrf_token %}
{{form.as_p}}
<input type = "submit" class = "button" value = "Save"/>
Akákoľvek pomoc by bola veľmi ocenená!
odpovede:
1 pre odpoveď č. 1__unicode__()
musí vždy vrátiť reťazec alebo unicode. Party.__unicode__()
nie. Na opravu skonvertujte vrátenú hodnotu explicitne na reťazec: return str(self.PartyID)
0 pre odpoveď č. 2
Pridať takúto metódu.
def __unicode__(self):
return u"%i" % self.CheckOutID
Dokumentácia hovorí:
Na Unicode() metóda sa nazýva vždy, keď zavoláte unicode() objektu.Od Django "s databázy backends vráti Unicode reťazce vo svojom modeli" s atribúty, by za normálnych okolností chcete napísať Unicode() metóda pre váš model.