Django AttributeError:' Campaign'对象没有属性' ads'

时间:2016-06-10 12:54:19

标签: python angularjs django django-rest-framework

我正在尝试在Django Rest Framework中的嵌套序列化器中创建,但我不断收到此错误。我知道它为什么要抛弃它,但我认为Django会处理这种一对多的关系。

  

/ api / campaigns中的AttributeError   尝试在序列化程序ads上获取字段CampaignSerializer的值时出现AttributeError。   序列化程序字段可能名称不正确,并且与Campaign实例上的任何属性或键都不匹配。   原始例外文字是:'广告系列'对象没有属性' ads'。

class Campaign(models.Model):

    name = models.CharField(max_length = 30)
    type = models.CharField(max_length = 20)
    start_date = models.DateField(auto_now=False, auto_now_add=True)
    end_date = models.DateField(auto_now=False, auto_now_add=True)
    locations = models.CharField(max_length = 30)
    budget = models.IntegerField()
    land_page = models.URLField()
    keywords = models.TextField()
    CPM = models.IntegerField()
    CPC = models.IntegerField()
    description = models.TextField()
    commission = models.IntegerField()
    pay_off = models.IntegerField()
    advertiser = models.ForeignKey(User)
    date_time = models.DateField(auto_now=False, auto_now_add=True)

class Meta:
    db_table = "campaigns"

class ADS(models.Model):

    advertiser = models.ForeignKey(User)
    campaign = models.ForeignKey(Campaign)
    headline = models.CharField(max_length=50)
    description_1 = models.TextField(blank=True)
    description_2 = models.TextField(blank=True)
    display_url = models.URLField(blank=True)
    final_url = models.URLField(blank=True)
    mobile_url = models.URLField(blank=True)


class Meta:
    db_table = "ads"

这些是我的序列化程序

class ADSerializer(serializers.ModelSerializer):

    adsImages = AdsImagesSerializer(read_only=True,many=True)

class Meta:
    model = ADS
    fields = ("headline","description_1","description_2","display_url","final_url","mobile_url","advertiser","adsImages")


class CampaignSerializer(serializers.ModelSerializer):

    advertiser = AdvertiserProfile(read_only=True,required=False)
    ads = ADSerializer(many=True)

class Meta:
    model = Campaign
    fields = ("name","type","start_date","end_date","locations","budget","land_page","keywords","CPM","CPC","description","commission","pay_off","ads","advertiser",)

def get_validation_exclusions(self, *args, **kwargs):
    exclusions = super(CampaignSerializer,self).get_validation_exclusions()

    return exclusions + ['advertiser']

def create(self, validated_data):
    ads_data = validated_data.pop('ads')
    campaign = Campaign.objects.create(**validated_data)
    for ad_data in ads_data:
        ADS.objects.create(campaign=campaign, **ad_data)
    return campaign

1 个答案:

答案 0 :(得分:0)

我刚修好了这个,在模型中有一个相关的名字

campaign = models.ForeignKey(Campaign, related_name="ads")

我认为它上次没有效果,因为没有相关名称,反向关系无效。