2017-02-09 116 views
0

我有一個奇怪的問題,我不能補救:當使用包含兩個模型之間的外鍵屬性的窗體時,Django不顯示任何用戶的屬性,除了用戶名。Django窗體顯示用戶屬性

關聯的用戶名顯示正確,但沒有其他屬性是(名字,姓氏,電子郵件等)。

同樣,我放置在views.py中的調試打印語句正確地在終端輸出中打印用戶的屬性。

爲什麼用戶的任何屬性都不顯示在html模板中?

models.py

class UnitGroup(models.Model): 
    unit_name = models.CharField(max_length=150, verbose_name='Unit Name') 

class UnitUser(models.Model): 
    user = models.OneToOneField(User) 
    unit = models.ForeignKey(UnitGroup) 
    ROLES = ((0, 'Admin'), (1, 'Member')) 
    role = models.IntegerField(null=True, blank=True, verbose_name='Role', choices=ROLES) 

    def __string__(self): 
     return self.user.first_name 

forms.py

class UserGroupForm(forms.ModelForm): 
    class Meta: 
     model = UnitUser 
     fields = '__all__' 

views.py

from units.forms import UnitForm, UnitDetailsForm, UserGroupForm 
from units.models import UnitGroup, UnitDetails, UnitUser 
from django.contrib.auth.models import User 

def edit_members(request): 
    if request.user.is_authenticated() \ 
      and request.method == 'GET' \ 
      and 'unit' in request.GET: 

     unit_group = request.GET['unit'] 
     unit_users = UnitUser.objects.filter(unit=unit_group) 
     unit_forms = [] 

     for i in unit_users: 

      # debug 
      print(i.user.first_name) 
      print(i.user.last_name) 

      unit_forms.append(UserGroupForm(instance=i)) 

     return render(request, 'units/edit-members.html', {'unit_forms': unit_forms}) 

編輯members.html

{% for form in unit_forms %} 

    user: {{ form.user }} <br> 
    first name: {{ form.user.first_name }} 

{% endfor %} 

回答

1

你UserGroupForm是模型形式的基礎上,UnitUser模型。 表單的字段基於模型的字段。

由於UnitUser不包含有關用戶的詳細信息,而僅包含對用戶模型的單個引用,所以用戶模型本身僅通過單個字段表示。用戶模型的字符串表示形式是用戶名。我想這就是你在表單中看到用戶名的原因。

簡而言之:您的模型表單將用戶視爲單個字段,並將該字段的值的字符串表示形式用作初始值。

如果要在表單中顯示用戶的其他屬性,則可能必須爲此目的構造特定的表單。

+0

謝謝!我在想它是傳遞實際的對象而不是字符串表示。我通過放棄模型表單並將模型值傳遞到網頁上的表單來解決此問題,然後將結果傳回到views.py中的模型對象中。顯然還有更多的工作,但它能完成這項工作。 – Twitch