Django. ForeighnKey's data.
-
Good afternoon. There are three models: Registered lasers, Goods, Order.
class AuthUser(AbstractBaseUser, PermissionsMixin): ... username = models.CharField(unique=True, max_length=11, validators=[alphanumeric]) ... def __str__(self): return '%s %s %s' % (self.last_name, self.first_name, self.second_name)
Goods
class Tovar(models.Model): tovar_name = models.CharField(max_length=20, unique=True) tovar_kol = models.IntegerField(default=0) # кол-во tovar_prod = models.IntegerField(default=0) # кол-во покупок tovar_img = models.ImageField(upload_to='img/tovar', blank=False, default='img/tovar/tovar.jpg')
def __str__(self): return self.tovar_name
order
class Zakaz(models.Model):
zakaz_nomer = models.IntegerField(default=0, blank=True, null=True)
zakaz_status = models.IntegerField(default=0, blank=True, null=True) # 1 - work , 2 - close , 3 - denied
zakaz_tovar = models.ForeignKey(Tovar, blank=True, null=True)
zakaz_kol = models.IntegerField(default=0, blank=False, null=False)
zakaz_user = models.ForeignKey(AuthUser, blank=True, null=True)
zakaz_time = models.DateTimeField(default=timezone.now())
zakaz_comment = models.CharField(blank=True, null=True, max_length=300)def __str__(self): return '%s %s' % (self.zakaz_tovar, self.zakaz_user)
In the template, I deliver all the goods through for, every product has a button with a id merchandise. On this page, the form that the user fills. The problem is, I can't make ForeighnKey's fields into the OBD!
def try_buy(request, tovar_id=1):
args = {}
args['me'] = request.user.username
args['form'] = ZakazForm()
args['tovar'] = Tovar.objects.get(id=tovar_id)
tov = Tovar.objects.get(id=tovar_id)
args['zakaz_name'] = tov.tovar_name
args['zakaz_user'] = request.user.username
return render_to_response('try_buy.html', args, context_instance=RequestContext(request))
Submarine:
...
<form action="/examp/buy/" method="post">{% csrf_token %}
<textarea rows="1" name="zakaz_user" readonly>{{ zakaz_user }}</textarea>
<textarea rows="1" name="zakaz_tovar" readonly>{{ zakaz_name }}</textarea>
{{ form.zakaz_kol }}
{{ form.zakaz_comment }}
...
form:
class ZakazForm(forms.ModelForm):
class Meta():
model = Zakaz
fields = ['zakaz_tovar', 'zakaz_user', 'zakaz_comment', 'zakaz_kol', 'zakaz_tovar']
widgets = {
'zakaz_comment': Textarea(attrs={'cols': 50, 'rows': 20}),
}
How am I supposed to work in a vortex? So, there's two merchandise with different ids and different lasers, how do I pick the right product, the laser and tie it to the order?
Here's my terrible vein, but I'm gonna change it, and I'm gonna get ForeignKey and I to figure it out. ♪ ♪def catalog_buy(request):
args = {}
args.update(csrf(request))
args['form'] = ZakazForm()
args['me'] = request.user.username
if request.method == 'POST' and ("pause" not in request.session):
zakaz_tovar = request.POST.get('zakaz_tovar', '')
zakaz_user = request.POST.get('zakaz_user', '')
form = ZakazForm(request.POST)
if form.is_valid():
form.zakaz_tovar = zakaz_tovar
form.zakaz_user = zakaz_user
form.save()
request.session.set_expiry(30)
request.session['pause'] = True
args['kat_done'] = 1
id_schetpre = Zakaz.objects.order_by('-zakaz_nomer')[0]
id_schet = Zakaz.objects.order_by('zakaz_nomer')[0]
if id_schetpre.zakaz_nomer >= 0:
id_schet.zakaz_nomer = id_schetpre.zakaz_nomer
id_schet.zakaz_nomer += 1
id_schet.zakaz_status = 1
id_schet.save()
id_schetdone = Zakaz.objects.order_by('-zakaz_nomer')[0]
args['ur_zakaz_nomer'] = id_schetdone.zakaz_nomer
id_schetdone.zakaz_status = 1
return render_to_response('try_buy.html', args, context_instance=RequestContext(request))
else:
redirect("/")
else:
args['kat_error1'] = "Заполните поля верно!"
return render_to_response('try_buy.html', args, context_instance=RequestContext(request))
else:
args['kat_error2'] = "Покупки можно совершать 1 раз в 30 секунд!"
return render_to_response('try_buy.html', args, context_instance=RequestContext(request))
-
Hello. You need to determine where to maintain, or by redefining the method of form save, or by keeping it in the duke. Your code is something medium between that and that. The method to save shape would look like that.
from models import Zakaz, Tovar, AuthUser
class MyForm(Forms.Form):
def save(self): tovar = Tovar.objects.get(name=self.cleaned_data['zakaz_tovar']) user = AuthUser.objects.get(name=self.cleaned_data['zakaz_user']) zakaz = Zakaz(zakaz_tovar=tovar, zakaz_user=user, zakaz_comment=self.cleaned_data['zakaz_comment'], zakaz_kol=self.cleaned_data['zakaz_kol']) zakaz.save()