我对如何在Django Admin中添加多个access_token和items_ids感到有些困惑。涉及的模型和应用程序如下。这是我的第一篇文章,如果格式不正确,请原谅。
Trans / models.py
Exchange类(models.Model):
created = models.DateTimeField()
owner = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='token', on_delete=models.CASCADE)
access_token = models.CharField(max_length=300, blank=True, default='')
item_id = models.CharField(max_length=300, blank=True, default='')
request_id = models.CharField(max_length=300, blank=True, default='')
class Meta:
ordering = ('item_id',)
我已经为管理员设置了一个用户个人资料部分:
Users / models.py
类UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key=True, verbose_name='user', related_name='profile', on_delete=models.CASCADE)
avatar_url = models.CharField(max_length=256, blank=True, null=True)
dob = models.DateField(verbose_name="dob", blank=True, null=True)
public_token = models.CharField(max_length=100, blank=True, null=True, verbose_name='public_token')
access_token = models.CharField(max_length=100, blank=True, null=True, verbose_name='access_token')
item_id = models.CharField(max_length=100, blank=True, null=True, verbose_name='item_ID')
just_signed_up = models.BooleanField(default=True)
def __str__(self):
return force_text(self.user)
class Meta():
db_table = 'user_profile'
users / forms.py
UserProfileForm(forms.ModelForm)类:
class Meta:
model = UserProfile
fields = ('user', 'public_token', 'access_token', 'item_id',)
users / admin.py
UserProfileAdmin(admin.ModelAdmin)类:
search_fields = ('user', 'dob', 'public_token', 'access_token', 'item_id',)
ordering = ('user',)
list_select_related = ('user',)
admin.site.register(UserProfile,UserProfileAdmin)
UserProfileAdminInline(admin.TabularInline)类:
model = UserProfile
我真的很沮丧,因为我尝试了很多领域,但是似乎无法正确链接,或者在沙盒环境中进行测试时过程中断了。任何帮助将不胜感激!就我而言,我需要为每个用户记录多个access_tokens和item_id。
答案 0 :(得分:1)
这有点让您感到困惑...尤其是您的数据模型的设置方式....但是我将在回答中做出一些假设(这将有助于更好地理解您正在试图做的高水平的事情。
我思考您想要做的是能够为每个用户配置文件配置多个Exchange
对象...在这种情况下,我将通过以下方式进行设置:
1.交换模型中用户个人资料上FK上的related_name
字段将是您访问多个交易所的方式...因此,在这种情况下,您可能需要一个复数名称。
2.为了能够在Django Admin中编辑多个,您将需要设置一个InlineAdmin对象。
3.实际上位于UserProfile
上的CharField只能是单个字段...如果要多个,则需要将它们移动到另一个相关对象(例如Exchange
模型)。
4.我不认为您想要的是ManyToMany
,因为这意味着用户将共享这些令牌和项目ID(或Exchange?)...但是也许正是您想要的...在这种情况下,您应该将ForeignKey
模型的UserProfile
更改为Exchange
到ManyToManyField
。这篇文章的其余部分假定您不想要那样。
trans / models.py
from django.db import models
from django.conf import settings
class Exchange(models.Model):
class Meta:
ordering = ('item_id', )
created = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='exchanges', on_delete=models.CASCADE)
access_token = models.CharField(max_length=300, blank=True)
item_id = models.CharField(max_length=300, blank=True)
request_id = models.CharField(max_length=300, blank=True)
users / models.py
from django.db import models
from django.conf import settings
class UserProfile(models.Model):
class Meta:
db_table = 'user_profile'
user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key=True, verbose_name='user', related_name='profile', on_delete=models.CASCADE)
avatar_url = models.CharField(max_length=256, blank=True)
dob = models.DateField(verbose_name="dob", blank=True, null=True)
public_token = models.CharField(max_length=100, blank=True, null=True)
access_token = models.CharField(max_length=100, blank=True, null=True)
item_id = models.CharField(max_length=100, blank=True, null=True)
just_signed_up = models.BooleanField(default=True)
def __str__(self):
return force_text(self.user)
users / admin.py
from django.contrib import admin
from trans.models import Exchange
from users.models import UserProfile
class ExchangeAdminInline(admin.TabularInline):
model = Exchange
class UserProfileAdmin(admin.ModelAdmin):
inlines = (ExchangeAdminInline, )
search_fields = ('user', 'dob', 'public_token', 'access_token', 'item_id', )
ordering = ('user', )
list_select_related = ('user', )
admin.site.register(UserProfile, UserProfileAdmin)
您可以做很多事情来配置内联以表现您想要的行为...但这就是基础。