/ / Django zahraničný kľúč a formuláre - django, django-modely, django-formy, django-šablóny, django-názory

Django cudzí kľúč a formy - django, django-modely, django-formy, django-šablóny, django-názory

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.