簡體   English   中英

django 屬性錯誤:對象沒有屬性“get_bound_field”

[英]django attribute error : object has no attribute 'get_bound_field'

顯然,我的模板上加載的表單需要一個未傳遞給它的字段。

誰能告訴我是什么導致了這個錯誤?

模板渲染過程中發生錯誤

In template C:\django\projectname\static\templates\link_list.html, error at line 114
'UserProfile' object has no attribute 'get_bound_field'
104     
105           </p>
106     
107         </form>
108           </div>
109           <div id="make-offer" style="display: none">
110     
111           <p>Make an offer</p>
112           <form class=".formLayout" name="offer-form" action="" method="post" enctype="multipart/form-data">
113           {% csrf_token %}
114           {{ form.as_table }}
115           <input type="submit" class="data" style="font-family: VT323; font-size: 50%" value="Submit" />
116           </form>
117           </div>     
118           </div>
119         </div>
120       </div>

這是由以下視圖提供的:

def link(request):
    print("trying to authenticate...")
    if request.user.is_authenticated():
        user_profile = UserProfile.objects.get(user=request.user)

    else:
        return render(request, 'login.html')

    if request.method == "POST":
        print("request was a post.")
        if request.is_ajax():
            ...
        else:        

            if request.method == "POST":    
                form = OfferForm(request.POST, request.FILES, maker_id=user_profile.id)
                if form.is_valid():
                    if request.POST.get('location'):                        
                        offer = form.save()
                        offer.save()
                    offer.maker = maker
                    offer.save()

                else:
                    print form.errors

            return render(request, "link_list.html", {'form' : form} )

    else:

        form = OfferForm(maker_id=user_profile.id)
        print("request wasn't ajax.")
        data = {'form': form}
        return render(request, 'link_list.html', data)

以下是相關的模型和表格:

class OfferForm(forms.ModelForm):        

    def __init__(self, *args, **kwargs):
        maker_id = kwargs.pop('maker_id')
        super(OfferForm, self).__init__(*args, **kwargs)
        maker = UserProfile.objects.get(id=maker_id)
        self.fields['maker'] = maker


    class Meta:
        model = Offer
        fields = [
            "name", 
            "value",
            "description",
            "tags",
            "location",
            "service",
            "icon",
        ]
        widgets = {
            'name': forms.TextInput(
                attrs={'id': 'name', 'class': '.formLayout', 'style': 'font-family: VT323; font-size: 60%', 'required': True, 'placeholder': 'name'}
            ),
            'value': forms.TextInput(
                attrs={'id': 'value', 'class': '.formLayout', 'style': 'font-family: VT323; font-size: 60%', 'required': True, 'placeholder': 'value'}
            ),
            'description': forms.TextInput(
                attrs={'id': 'description', 'class': '.formLayout', 'style': 'font-family: VT323; font-size: 60%', 'required': True, 'placeholder': 'description'}
            ),
            'tags': forms.TextInput(
                attrs={'id': 'tags', 'class': '.formLayout', 'style': 'font-family: VT323; font-size: 60%', 'required': True, 'placeholder': 'tags'}
            ),   
            'location': forms.TextInput(
                attrs={'id': 'location', 'class': 'geo', 'data-geo': 'location', 'required': False, 'placeholder': 'leave blank to use your location'}
            ),
            'service': forms.CheckboxInput(
                attrs={'id': 'service', 'class': '.formLayout', 'required': False}
            ),
}

模型.py

class UserProfile(models.Model):

    user = models.OneToOneField(User)    
    website = models.URLField(blank=True, null=True)
    location = models.CharField(max_length=200, null=True)
    longitude = models.FloatField(null=True)
    latitude = models.FloatField(null=True)
    credit = models.FloatField(default=0, null=True)
    picture = models.ImageField(upload_to=upload_location, blank=True)

    def __unicode__(self):
        return self.user.username

class Offer(models.Model):

    name = models.CharField(max_length=120)
    description = models.CharField(max_length=120)
    value = models.FloatField(default=0.0) 
    tags = models.CharField(max_length=120, null=True)
    maker = models.ForeignKey(UserProfile, null=True)


    def __unicode__(self):
        return self.name   

在您的表單中,您將獲得一個 UserProfile 對象,然后將其分配為一個字段。 但它不是一個字段,它是一個模型對象。

我不知道你想在那里做什么,但不要將該對象分配給字段 dict。

在models.py init函數中,您應該在字段后使用.queryset,如下所示:

def __init__(self, *args, **kwargs):
    maker_id = kwargs.pop('maker_id')
    super(OfferForm, self).__init__(*args, **kwargs)
    maker = UserProfile.objects.get(id=maker_id)
    self.fields['maker'].queryset = maker

如果你正在嘗試設置queryset該字段或(可用選項),那么你可以做以下

def __init__(self, *args, **kwargs):
    maker_id = kwargs.pop('maker_id')
    super(OfferForm, self).__init__(*args, **kwargs)
    maker = UserProfile.objects.get(id=maker_id)
    self.fields['maker'].queryset = maker

在可能的情況下,我想為該字段設置initial值或(默認)值。 所以,我必須傳遞一個object而不是queryset

def __init__(self, *args, **kwargs):
    maker_id = kwargs.pop('maker_id')
    super(OfferForm, self).__init__(*args, **kwargs)
    maker = UserProfile.objects.get(id=maker_id)
    self.fields['maker'].initial = maker.first()

你實際上可以both 設置querysetinitial

暫無
暫無

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

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