繁体   English   中英

Django - 从父母DetailView创建或更新反向外键object

[英]Django - Create or Update reverse foreign key object from parents DetailView

我想在父 object DetailView 上创建或更新子 object。

我有两个模型,如下:

class Parent(models.Model):
    name = models.CharField(max_length=50)

class Child(models.Model):
    name = models.CharField(max_length=50)
    parent = models.ForeignKey(
        'Parent', related_name='children', on_delete=models.CASCADE)

我有以下看法:

 class ParentDetailView(DetailView):
    model = Parent

在 ParentDetailView 上允许创建或更新子 object 的最佳方法是什么?

我在 Django 文档中看到了以下方法 - https://docs.djangoproject.com/en/2.2/topics/class-based-views/mixins/#using-formmixin-with-detailview

非常感谢

“key”,可以这么说,就是在model class object中创建新字段时使用primary_key参数。 考虑这是我程序中帐户 model 的修改部分。

class Account(models.Model):
   username = models.CharField(max_length=50)
   email = models.EmailField(max_length=50, primary_key=True)
   password = models.CharField(max_length=50)
   posts = models.IntegerField(default=0)

email 字段被设置为一个主键,可用于从程序访问此特定帐户 object。 让我们在views.py中看到它:

email = request.COOKIES.get('email')   
user = Account.objects.get(pk=email)
user.posts = users.posts + 1
user.save()

很酷,所以我们可以更新 object。 您也可以创建一个新字段,并且不必定义每个字段,但您需要确保它们在 models.py 中具有数据库的默认值。

new_acc = Account(username = form_username, email = form_email, password = form_password)
new_acc.save()

现在,如果您超级酷,并且有了它,您甚至不想将个人信息保存为 cookie。 核实

class Account(models.Model):
   username = models.CharField(max_length=50)
   email = models.EmailField(max_length=50, primary_key=True)
   password = models.CharField(max_length=50)
   uuid = models.CharField(max_length=500, default='defaultforDB')

在views.py中创建

   new_acc = Account(username = form_username, email = form_email, password = form_password, uuid = unique_uuid)
   new_acc.save()

现在我仍然希望能够仅使用 email 找到我的帐户。 因此,我创建了另一个 ProfileKey model,其中使用非个人信息用户名并将其本地存储在浏览器上以访问我的数据库。

    if not(request.COOKIES.get('user', 'default') == 'default'):
       user = request.COOKIES.get('user')
       uuid = request.COOKIES.get('uuid')
       userDB_uuid = (Account.objects.get(pk=(ProfileKey.objects.get(pk=(user))).email)).uuid
    if uuid == userDB_uuid:
        return render(request, 'forum/personalhome.html', {'form':form, 'user':user})

通常,创建 object。 使用保存。 找到 object,更改一个值,使用保存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM