当前位置: 首页 > 面试题库 >

Django中具有OneToOneField的ModelForm

罗源
2023-03-14
问题内容

我在Django中有两个与OneToOneField(PrinterProfile和PrinterAdress)相关的模型。我正在尝试使用创建表单PrinterProfileForm,但由于某种原因,它不会将PrinterAddress字段传递给表单(模板中的Django“ magic”未将其呈现)。

我应该怎么做才能PrinterProfileForm包括我的字段PrinterAddress(及其相关字段OneToOneField)?

非常感谢

class PrinterProfile(TimeStampedModel):
    user = models.OneToOneField(User)
    phone_number = models.CharField(max_length=120, null=False, blank=False)
    additional_notes = models.TextField()
    delivery = models.BooleanField(default=False)
    pickup = models.BooleanField(default=True)


# The main address of the profile, it will be where are located all the printers.    
class PrinterAddress(TimeStampedModel):
    printer_profile = models.OneToOneField(PrinterProfile)
    formatted_address = models.CharField(max_length=200, null=True)
    latitude = models.DecimalField(max_digits=25, decimal_places=20)  # NEED TO CHECK HERE THE PRECISION NEEDED.
    longitude = models.DecimalField(max_digits=25, decimal_places=20)  # NEED TO CHECK HERE THE PRECISION NEEDED.
    point = models.PointField(srid=4326)

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

class PrinterProfileForm(forms.ModelForm):
    class Meta:
        model = PrinterProfile
        exclude = ['user']

问题答案:

你必须为其创建第二个表单PrinterAddress并在视图中处理这两种形式:

if all((profile_form.is_valid(), address_form.is_valid())):
    profile = profile_form.save()
    address = address_form.save(commit=False)
    address.printer_profile = profile
    address.save()

当然,在模板中,你需要在一个<form>标签下显示两种形式:

<form action="" method="post">
    {% csrf_token %}
    {{ profile_form }}
    {{ address_form }}
</form>


 类似资料:
  • 问题内容: django OneToOneField和ForeignKey有什么区别? 问题答案: 请注意,和之间存在一些差异。如《 Django权威指南》所述: 一对一 一对一的关系。从概念上讲,这与 相似,但是关系的“反向”侧将直接返回单个对象。 与“反向”关系相反,“反向”关系返回。 例 例如,如果我们有以下两个模型(下面是完整的模型代码): 模型用途 模型用途 从内部执行以下操作: One

  • 问题内容: 所以我有我的TagStatus模型。我正在尝试为此制作一个ModelForm。但是,我的表单要求使用{{tag.name}}填充隐藏的输入。我一直在浏览文档,但不知道如何使标记字段成为隐藏的输入。也许ModelForm不是要走的路? models.py: django views.py: 模板: 我将如何通过Django ModelForm进行隐藏输入,然后通过模板进行填充? 问题答案

  • 我的用户模型中有几个字段是choice字段,并且正在尝试找出如何将其最好地实现到Django Rest框架中。 下面是一些简化的代码来显示我正在做什么。 基本上,我要做的是让get/post/put方法使用choice字段的display值,而不是代码,类似于下面的JSON。 我该怎么做呢?上面的代码不起作用。之前,我有这样的东西用于GET,但用于post/put会给我带来错误。我正在寻找如何这样

  • 我有这样布局的模型: 这里的场景是我永远不希望用户删除数据。相反,删除只会隐藏记录。但是,我仍然希望所有非软删除的记录都遵循唯一的键约束。基本上,我希望有尽可能多的重复的已删除记录,但只有一个唯一的未删除记录可以存在。所以我本来想包括“已删除”字段(由django安全删除库提供),但问题是Django的唯一检查因“psycopg2”而失败。完整性错误:重复的键值违反了 ['field2', 'fi

  • 问题内容: 在Django中,我将SESSION_COOKIE_DOMAIN设置为我的域名。但是我实际上想使用两个不同的域名来运行同一站点。 在设置了SESSION_COOKIE_DOMAIN的情况下,只有命名域才允许用户登录。是否可以同时允许两个域登录? 问题答案: 如果你将会话cookie域设置为以“。”开头。字符,它将使你能够处理通配符子域并在多个子域之间共享会话cookie(登录会话)。

  • 问题内容: 所以我试图使这种形式异步。理想情况下,我使用此表单添加单位,然后动态更新表。我不希望整个页面刷新。我对javascript不太满意,可以对发生的事情使用一些指针: 我不想发生的一些事情正在发生: 整个页面令人耳目一新 request.is_ajax()为False。 通常,我只是想了解发生了什么,但问题是,如何更改以下内容以解决上述两个问题?(如果它们是问题,那么根本就是问题。) 作为