如何将对象的pk传递给模板形式

时间:2020-06-14 09:37:31

标签: python django forms parameter-passing primary-key

情况如下: 对象:种族,赛车手,登记 我正在尝试使用一种表格为用户提供注册比赛的可能性。

型号:

class registration(models.Model):
    STATUS = [
    ('Registered','Registered'),
    ('Confirmed','Confirmed'),
    ]
    race_id = models.ForeignKey(Race, on_delete=models.CASCADE, related_name='rrace')
    racer_id = models.ForeignKey(Racer, on_delete=models.CASCADE, related_name='rracer')
    registration_date = models.DateTimeField(auto_now_add=True)
    medals = models.BooleanField(default=False, help_text="do you wish it?")
    registration_status = models.CharField(choices=STATUS, default='Registered', max_length=15)

表格:

 class RegisterRace(forms.ModelForm):
    class Meta:
        model = registration
        fields = ("race_id", "racer_id"")

url:

path('register-race/', views.race_register, name='race_register'),

观看次数:

def race_register(request):
    if request.method == "POST":
        c = request.POST.get('race') # this line is ONLY for debugging
        race = Race.objects.get(pk=request.POST.get('race'))
        form = RegisterRace(request.POST)
        if form.is_valid():
            form.save()
            return redirect('races')
    else:
        form = RegisterRace()
    return render(request, 'race_registration.html', {'form': form, 'rc': race})

race_detail模板包含以下链接:

<form action="/register-race/" method="POST">{% csrf_token %}
   <input type="hidden" name="race" value="{{event.pk}}"> # where event is the current race 
   <input type="submit"  value="REGISTRATION" class="btn btn-large btn-primary">
</form>

race_registration.html模板包含:

<form action="/register-race/" method="POST" enctype="multipart/form-data" class="form-horizontal">{% csrf_token %}
        <input type = "hidden" name = "race_id" value="{{rc.pk}}"> # for debugging purpose here I have also tried with value="{{c}}"
        <input type = "hidden" name = "racer_id" value="{{request.user.pk}}">
        <button type="submit" class="btn btn-primary">REGISTER MYSELF</button>
</form>

当我按下“注册”按钮时,发生以下错误:

在/ register-race /处的

DoesNotExist不存在种族匹配查询。 请求方法:POST请求URL:http://127.0.0.1:8000/register-race/ Django版本:3.0.2异常类型:DoesNotExist异常值:
种族匹配查询不存在。例外 位置:C:\ Users ----- \ AppData \ Local \ Programs \ Python \ Python38-32 \ lib \ site-packages \ django \ db \ models \ query.py 在第415行

跟踪:

..race\views.py in register-race
        race = Race.objects.get(pk=request.POST.get('race')) …
▼ Local vars
Variable    Value
c           None
request     <WSGIRequest: POST '/register-race/'>

无论上面我在模版race_registration.html中放置了什么,

Register to race {{race.race_type}} which have the id {{race.pk}}

并且渲染符合预期-注册参加ID为19的INDIANAPOLIS 2020比赛

因此,我不明白错误在哪里以及为什么表格无法接收正确的值...

1 个答案:

答案 0 :(得分:0)

我认为您真的一无所获。为什么要使用表格?

为什么不这样做:

urls.py

path('register-race/<race_id>', views.race_register, name='race_register'),

race_detail_template

<a href="{%url 'race_register' race_id=event.pk %}">Register me on this race</a>

视图

def race_register(request, race_id):
    try:
        race = Race.objects.get(pk=race_id)
        race.rracers.add(your_racer_object)
    except Race.DoesNotExist:
        #deal with the problem
    return redirect(wereveryouwant)