首页 文章

如何在Django Admin中显示多个对象

提问于
浏览
0

关于如何在Django Admin中添加多个access_token和items_ids,我有点难过 . 涉及的模型和应用程序如下 . 这是我的第一篇文章,请原谅,如果格式不正确 .

反式/ models.py

class 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',)

我为管理员设置了一个userprofile部分:

用户/ models.py

class 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'

用户/ forms.py

class UserProfileForm(forms.ModelForm):

class Meta:
    model = UserProfile
    fields = ('user', 'public_token', 'access_token', 'item_id',)

用户/ admin.py

class UserProfileAdmin(admin.ModelAdmin):

search_fields = ('user', 'dob', 'public_token', 'access_token', 'item_id',)
ordering = ('user',)
list_select_related = ('user',)

admin.site.register(UserProfile,UserProfileAdmin)

class UserProfileAdminInline(admin.TabularInline):

model = UserProfile

我真的很难过,因为我尝试制作多个到多个字段,但似乎无法正确链接,或者在沙箱环境中测试时进程中断了 . 任何帮助将不胜感激!在我的情况下,我需要为每个用户记录多个access_tokens和item_ids .

1 回答

  • 1

    你问的问题有点令人困惑......特别是你的数据模型的设置方式......但是我会在答案中做出一些假设(这有助于更好地理解你是什么试图在高水平做) .

    我认为你想要做的是能够为每个用户配置文件配置多个 Exchange 对象...在这种情况下我会这样设置:1 . FK上的 related_name 字段到交换模型中的用户配置文件将是你如何访问多个交易所...所以在这种情况下,你可能想要一个复数名称 . 2.为了能够在Django Admin中编辑多个,您需要设置InlineAdmin对象 . 3.实际上在 UserProfile 上的CharFields将只是单个字段...如果你想要多个,那么你需要将它们移动到另一个相关对象(如 Exchange 模型) . 4.我不认为你想要的是 ManyToMany ,因为这意味着用户将共享这些令牌和项目ID(或交换?)......但也许这就是你想要的......在这种情况下你应该将 ForeignKeyExchange 模型更改为 UserProfileManyToManyField . 本文的其余部分假设您不希望如此 .

    反式/ 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)
    

    用户/ 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)
    

    用户/ 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)
    

    你可以做很多事情来配置内联以表现你想要的......但这是基础知识 .

相关问题