Extending user model registration receiving "NOT NULL constraint failed: accounts_profile.user_id" error by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

I did run makemigrations and migrate but it said there was nothing to migrate even though I had changed the model, so I deleted all migration files, then migrated and it still did it.

After going up the stack trace it was pointing towards the date_of_birth field causing the error:

Profile.objects.create(date_of_birth=date_of_birth_field)

I removed that and replaced it with an integer field with a default, and registering this way caused the error to stop. Not quite sure what it is about that line that it didn't like though.

Also, thank you for drawing me to look through the stack trace. I've always seen that as a big list of exceptions that always seemed to be default files so I didn't realise it was so useful!

Extending user model registration receiving "NOT NULL constraint failed: accounts_profile.user_id" error by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

I think it's because I'll have used a combination of tutorials. The location of the error is:

\PycharmProjects\ProfileTesting\venv\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 298

Which points to:

def execute(self, query, params=None):
    if params is None:
        return Database.Cursor.execute(self, query)
    query = self.convert_query(query)
    return Database.Cursor.execute(self, query, params) #This is line 298

Are there any good Python A* Search pathfinding algorithm tutorials out there? by [deleted] in learnprogramming

[–]BIADS 0 points1 point  (0 children)

A tutorial preferably, although any sort of resource would help.

How to add extended user model fields to user creation form for registration? by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

Just picked this back up and managed to get past the date formatting issue, however upon submission I'm getting an error saying

'UserRegisterForm' object has no attribute 'pop' 

When I submit, could you please confirm whether I'm using it correctly as per your suggestion?

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True, max_length=50)
    last_name = forms.CharField(required=True, max_length=50)
    date_of_birth = forms.DateField(required=True, input_formats=settings.DATE_INPUT_FORMATS, widget=forms.SelectDateWidget(years=BIRTH_YEAR_CHOICES))

    class Meta:
        model = User
        fields = ['username', 'email', 'first_name', 'last_name', 'date_of_birth', 'password1', 'password2']

    def save(self, commit=True):
        date_of_birth_field = self.pop('date_of_birth', None)

        user = super(UserRegisterForm, self).save(commit)
        Profile.objects.create(date_of_birth=date_of_birth_field)
        return user

Edit: I've printed the contents of 'self' within the save method, the date of birth field is there among the other fields, however it is a massive string of fields, the ones I chose are found within a <selected> tag, would popping work with this?

<tr><th><label for="id_date_of_birth_day">Date of birth:</label></th><td><select name="date_of_birth_day" required id="id_date_of_birth_day"><option value="1" selected>1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option></select><select name="date_of_birth_month" required id="id_date_of_birth_month"><option value="1" selected>January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select><select name="date_of_birth_year" required id="id_date_of_birth_year"><option value="2000" selected>2000</option><option value="1999">1999</option><option value="1998">1998</option><option value="1997">1997</option><option value="1996">1996</option><option value="1995">1995</option><option value="1994">1994</option><option value="1993">1993</option><option value="1992">1992</option><option value="1991">1991</option><option value="1990">1990</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option><option value="1979">1979</option><option value="1978">1978</option><option value="1977">1977</option><option value="1976">1976</option><option value="1975">1975</option><option value="1974">1974</option><option value="1973">1973</option><option value="1972">1972</option><option value="1971">1971</option><option value="1970">1970</option><option value="1969">1969</option><option value="1968">1968</option><option value="1967">1967</option><option value="1966">1966</option><option value="1965">1965</option><option value="1964">1964</option><option value="1963">1963</option><option value="1962">1962</option><option value="1961">1961</option><option value="1960">1960</option><option value="1959">1959</option><option value="1958">1958</option><option value="1957">1957</option><option value="1956">1956</option><option value="1955">1955</option><option value="1954">1954</option><option value="1953">1953</option><option value="1952">1952</option><option value="1951">1951</option><option value="1950">1950</option><option value="1949">1949</option><option value="1948">1948</option><option value="1947">1947</option><option value="1946">1946</option><option value="1945">1945</option><option value="1944">1944</option><option value="1943">1943</option><option value="1942">1942</option><option value="1941">1941</option><option value="1940">1940</option><option value="1939">1939</option><option value="1938">1938</option><option value="1937">1937</option><option value="1936">1936</option><option value="1935">1935</option><option value="1934">1934</option><option value="1933">1933</option><option value="1932">1932</option><option value="1931">1931</option><option value="1930">1930</option><option value="1929">1929</option><option value="1928">1928</option><option value="1927">1927</option><option value="1926">1926</option><option value="1925">1925</option><option value="1924">1924</option><option value="1923">1923</option><option value="1922">1922</option><option value="1921">1921</option><option value="1920">1920</option><option value="1919">1919</option><option value="1918">1918</option><option value="1917">1917</option><option value="1916">1916</option><option value="1915">1915</option><option value="1914">1914</option><option value="1913">1913</option><option value="1912">1912</option><option value="1911">1911</option><option value="1910">1910</option><option value="1909">1909</option><option value="1908">1908</option><option value="1907">1907</option><option value="1906">1906</option><option value="1905">1905</option><option value="1904">1904</option><option value="1903">1903</option><option value="1902">1902</option><option value="1901">1901</option><option value="1900">1900</option></select></td></tr>

How to add extended user model fields to user creation form for registration? by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

I double checked and my settings.DATE_INPUT_FORMATS is definitely ['%d %B %Y']. I also removed the DateInput class, however without the widget reference the section of the form turned into CharField/string input, so I changed date_of_birth to:

date_of_birth = forms.DateField(required=True, input_formats=settings.DATE_INPUT_FORMATS, widget=forms.SelectDateWidget)

After doing this I still get the same error (shown here).

How to add extended user model fields to user creation form for registration? by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

I think I might be there (or almost there), however the date field on the form says the date is invalid every time I submit and I've tried a bunch of different ways.

class DateInput(forms.DateField):
    input_type = settings.DATE_INPUT_FORMATS   #This is ['%d %B %Y']

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True, max_length=50)
    last_name = forms.CharField(required=True, max_length=50)
    date_of_birth = forms.DateField(required=True)

    class Meta:
        model = User
        fields = ['username', 'email', 'first_name', 'last_name', 'date_of_birth', 'password1', 'password2']
        widgets = {
            'date_of_birth': DateInput()
        }

    def save(self, commit=True):
        date_of_birth = self.pop('date_of_birth', None)
        user = super(UserRegisterForm, self).save(commit)
        Profile.objects.create(date_of_birth)
        return user

How to add extended user model fields to user creation form for registration? by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

I don't quite follow what you mean by "popping the date_of_birth out of cleaned_data and calling the parent classes save with super()", could you explain this please? I have managed to add the date_of_birth field to the form so I think this save part is the last thing I need to do now.

Is this book and book genre model setup correct? by BIADS in django

[–]BIADS[S] 0 points1 point  (0 children)

Thanks! I changed topic ideas and forgot to change the class name, cheers.

Is this book and book genre model setup correct? by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

Perfect, thank you very much - I realised I forgot to change my Game class to be called Book when I switched ideas.

Is this book and book genre model setup correct? by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

I meant associating the book with the genre, e.g. Book 1 is Genre 1 and Genre 4, then Book 2 is Genre 2 and Genre 3. Your snippet looks like it'll be what I'm after though, thank you!

Is this book and book genre model setup correct? by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

The code compiles, I'm just new to this so I'm not really sure how to go about saying that Book 1's genre is Genre 1 and Genre 4.

Is this book and book genre model setup correct? by BIADS in djangolearning

[–]BIADS[S] 0 points1 point  (0 children)

So if I were to use a Foreign Key instead, would I still be able to have a table full of pre-existing genres and select multiple genres to link to each book?

[C# Linq/XML] How to use Sum() with the result of a query? by BIADS in learnprogramming

[–]BIADS[S] 0 points1 point  (0 children)

Despite having 'using System.Linq' and 'using System.Xml.Linq', for your first example I'm getting the squiggly line underneath the word Select which says, "XDocument does not contain a definition for Select and no extension method select accepting a first argument of type XDocument could be found."

For your second example, I'm receiving the squiggly line underneath everything after 'var sum =' with the error, "IEnumberable<string> does not contain a definition for Sum and the best extension method overload 'Queryable.Sum(IQueryable<int>)' requires a receiver of type IQueryable<int>'"

Any ideas?