【问题标题】:How to use ModelForm with django-address?如何将 ModelForm 与 django-address 一起使用?
【发布时间】:2019-07-17 23:02:39
【问题描述】:

我希望使用django-address 来针对个人资料存储地址。通过我的网页和 Django 管理员输入地址会导致保存地址,但是,地址并未针对配置文件存储,即配置文件对象不会以地址结尾。如何获取要针对 Profile 模型保存的地址?

# profiles/forms.py
from django import forms
from profiles.models import Profile
from address.forms import AddressField, AddressWidget


class ProfileUpdateForm(forms.ModelForm):    

  class Meta:
    model = Profile
    fields = ['somefieldsthatsave',
              'address',
              ]
    field_classes = {
        'address': AddressField,
    }
    widgets = {
        'address': AddressWidget,
    }

-

# profiles/models.py
import datetime
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

from guardian.shortcuts import assign_perm
from address.models import AddressField


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    address = AddressField(blank=True, null=True, on_delete=models.CASCADE)

    class Meta:
        ordering = ["-id"]
        permissions = (
            ('view_profile', 'View profile'),
        )

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        assign_perm('view_profile', self.user, self)


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

-

# profiles/views.py
from django.views.generic.edit import UpdateView  
from guardian.mixins import PermissionRequiredMixin

from profiles.models import Profile
from profiles.forms import ProfileUpdateForm


class ProfileOverview(PermissionRequiredMixin, UpdateView):
    model = Profile
    form_class = ProfileUpdateForm
    permission_required = 'view_profile'

感谢您的宝贵时间。

【问题讨论】:

  • 如何检查地址是否正确保存?
  • 我检查了管理界面的地址部分,完整的详细信息显示正确。但是,在“个人资料”部分中没有关联的地址。
  • 你能发布ProfileUpdateForm的定义吗?在您的ProfileAdmin 中,是否有AddressInline
  • 嗨,马克 - 我相信 ProfileUpdateForm 周围的信息已经存在?不,ProfileAdmin 中没有 AddressInline - 请您解释一下为什么这是相关的?谢谢。

标签: django django-forms


【解决方案1】:

您必须在管理文件中将地址定义为内联地址。

# admin.py
from django.contrib import admin
from address.models import Address
from profiles.models import Profile

class AddressInline(admin.StackedInline):
    model = Address

@admin.site.register(Profile)
class UserProfile(admin.ModelAdmin):
    inlines = (AddressInline,)


【讨论】:

  • 您好 Mensaah,感谢您的回答 - 这有什么帮助?我收到以下错误消息:“: (admin.E202) 'address.Address' has no ForeignKey to 'profiles.Profile'。”
  • 确认一下,您能在您的管理员上看到配置文件模型吗?
猜你喜欢
  • 2018-07-18
  • 1970-01-01
  • 2011-08-12
  • 2022-01-15
  • 2011-04-05
  • 2012-10-17
  • 1970-01-01
  • 2011-09-19
相关资源
最近更新 更多