簡體   English   中英

如何將外鍵初始化為Django中的一個表單?

[英]How to initialize foreign key into a form in Django?

我有這兩個模型,一個 Voucher model 是 RegistrationForm model 的外鍵。任何時候有人進行搜索並且該項目存在於 Voucher model 中,我希望將其初始化為注冊表並保存。

錯誤信息

 raise ValueError(
ValueError: Cannot assign "'phr201'": "RegistrationForm.voucher" must be a "Voucher" instance.

楷模

class Voucher(models.Model):
    name = models.CharField(max_length=120, null=True, blank=True)

 
class RegistrationForm(models.Model):
    voucher = models.OneToOneField(Voucher, on_delete=models.CASCADE)
    full_Name = models.CharField(max_length=200,)
    Date_of_birth = models.CharField(max_length=100)

查看.py

class RegistrationProcessing(generic.CreateView):
    form_class = Registerform
    template_name = 'RegistrationProcessing.html'

    def form_valid(self, form):
        form.instance.voucher = self.request.GET.get('q')
        return super().form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(RegistrationProcessing, self).get_context_data(**kwargs)
        query = self.request.GET.get('q', default='')
        print(query.id)
        context.update({
            'job_listing': Voucher.objects.filter(
                Q(name__iexact=query)
            )
        })
        return context


正如錯誤所說Cannot assign "'phr201'": "RegistrationForm.voucher" must be a "Voucher" instance你試圖將一個字符串分配給OneToOne關系你必須傳遞一個Voucher實例而不是傳遞字符串你'必須這樣做

def form_valid(self, form):
    voucher_instance = Voucher.objects.get(name=self.request.GET.get('q'))
    form.instance.voucher = voucher_instance
    return super().form_valid(form)

在這里我使用 get 所以如果給定的查詢不存在它會引發異常你必須在 try except 塊中處理它或者你可以使用其他方式這樣

Voucher.objects.filter(name=self.request.GET.get('q')).first()

或使用get_object_or_404()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM